crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Получить изображение рабочего стола
Danmerpro
  опции профиля:
сообщение 28.4.2012, 11:40
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 21.8.2011
Пользователь №: 2823

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день. Нужно реализовать рисование мышкой на рабочем столе. Первая мысль - получать изображение рабочего стола как картинку, а поверх неё уже и рисовать. Тут возникла загвоздка - как получить данные о пикселях, что за пределами виджета?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Danmerpro
  опции профиля:
сообщение 28.4.2012, 14:15
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 21.8.2011
Пользователь №: 2823

Спасибо сказали: 0 раз(а)




Репутация:   0  


Возникла следующая проблема - как развернуть виджет на всю область экрана? Как убрать рамки я нашел. А вот как сделать так, чтобы весь taskbar с меню "пуск" был скрыт рабочей областью виджета?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Danmerpro
  опции профиля:
сообщение 28.4.2012, 15:20
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 21.8.2011
Пользователь №: 2823

Спасибо сказали: 0 раз(а)




Репутация:   0  


С этим тоже разобрался. showFullScreen() что-то сразу не приметил.
На данный момент функция рисования такова:
void DrawingScene::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(0,0,desktop);
    painter.setPen(Qt::red);
    QList<QList<QPoint> >::const_iterator itb = mDrawBuffer.begin();
    while(itb != mDrawBuffer.end())
    {
        if((*itb).size() < 2) return;
        QList<QPoint>::const_iterator it = (*itb).begin();
        QPoint start = *it;
        it++;
        while(it != (*itb).end()) {
            QPoint end = *it;
            painter.drawLine(start,end);
            start = end;
            it++;
        }
        itb++;
    }
}

где desctop - это Pixmap, которая получается с помощью операции
desktop = QPixmap::grabWindow(QApplication::desktop() -> winId());

Из-за того, что в функции отрисовки постоянно вызывается
painter.drawPixmap(0,0,desktop);

программа тормозит и не получается плавно рисовать. Но если такую функцию не использовать, а заранее попытаться отрисовать, то всё равно вызов paintEvent перерисует все окно и то, что было в desktop не отобразится. Как быть? Возможно ли задать для виджета фиксированный фон, который потом лишь изредка менять?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.12.2024, 18:22