Russian Qt Forum
Ноябрь 25, 2024, 08:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Нарисовать отрезок
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Нарисовать отрезок (Прочитано 6190 раз)
Илья с поч.ящиком garner
Гость
Нарисовать отрезок
«
:
Май 02, 2006, 16:38 »
// QWidget * this;
1 QPainter p(this);
2 ..........
3 p.drawLine(P1, P2);
После 3-го дейстия хотелось бы вернуться к шагу 2 без предварительного QPixmap::grabWidget (QWidget * widget, const QRect & rectangle), например. Если отрезок диагональный, то это перерисовывка всего экрана.
Может есть варианты проще?
Записан
Sergeich
Гость
Нарисовать отрезок
«
Ответ #1 :
Май 02, 2006, 23:54 »
Корректно надо задачу ставить, молодой человек.
P.S.
Кондуктор с пиздой
Записан
Илья с поч.ящиком garner
Гость
Нарисовать отрезок
«
Ответ #2 :
Май 03, 2006, 08:43 »
Согласен, что формулировать вопрос надо корректно. После длительной работы с простой задачкой, она кажется тривиальной с точки зрения формулировки, что необязательно для другого. Так что пробую еще раз, если что непонятно задавайте вопрос по существу.
На объекте QWidget рисуется множество отрезков, полигонов и других замечательных фигур, например. Это рисование назовем событием №2.
Теперь необходимо на этом объекте нарисовать отрезок и потаскать одну из его сторон (P2) за курсором с фиксированным началом (P1). Т.е. следующим шагом я рисую, например, Красный отрезок сантиметров так в 20, пикселов так в 10, о прекрасный кондуктор. Появление данного отрезка - это событие №3. Теперь я хочу восстановить ситуацию на событие назад. Т.е. удалить отрезок. Насколько знаю - в библиотеке MFC для Windows это делается простой операцией XOR.
В QT4 проще предварительного захвата прямоугольной (с диагональю P1-P2) части QWidget для последующего ее восстановления-перерисовки в QWidget::paintEvent (удаление отрезка) ничего не придумал. А если отрезок во всю диагональ экрана (дарагой кандухтар) частая перерисовка прямоугольника с такой диагональю займет значительное время - типа будет тормозить, морозить всю программу.
Если что забыл пояснить - с удовольствием отвечу на ваши вопросы.
Особенно буду рад "Кондуктору с пиздой", который, надеюсь, продемонстрирует и некоторое понимание QT.
Записан
comrade
Гость
Нарисовать отрезок
«
Ответ #3 :
Май 03, 2006, 11:45 »
а какая проблема? рисуй как нравится. хочешь XORить - XORь. у QPainter есть такое слово setRasterOp( RasterOp r ) - вот туда на место r Qt::XorROP надо положить. по умолчанию там Qt::CopyROP записато. посмотри RasterOp в асистанте. там много всякого... это если в Qt3
а в Qt4 есть setCompositionMode( CompositionMode mode ) и
QPainter::CompositionMode_Xor соответственно. хотя область сохранять - тоже можно.
Записан
Sergeich
Гость
Нарисовать отрезок
«
Ответ #4 :
Май 03, 2006, 14:01 »
Я в свое время делал так: рисовал всю картинку в пиксмап, потом в paintEvent
выводил нужный кусок пиксмапа на виджет и рисовал быстро изменяющиеся объекты, типа твоего отрезка.
P.S.
Иностранец с табуреткой
Записан
Илья с поч.ящиком garner
Гость
Нарисовать отрезок
«
Ответ #5 :
Май 04, 2006, 08:02 »
В том и дело, Sergeich, что “нужный кусок пиксмапа” у меня иначе как прямоугольник не получается. В QWidget есть repaint(QRegion), но наверно не для этого случая.
Comrade, XORом как раз веселее, но у QPainter::setCompositionMode (CompositionMode mode) есть Warning: You can only set the composition mode for QPainter objects that operates on a QImage.
Подготовить рисунок на Qimage и через девайс рисования QWidget отразить его на мониторе – лучший в смысле скорости отображения вариант. Если нарисовать отрезок сначала на Qimage или на QWidget сразу, то всеравно процедура его удаления, с последующим отображением восстановленного куска, потребует работы с целым прямоугольником (с диагональю P1, P2), а это заметно глазу сказывается на скорости.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...