Название: Нарисовать отрезок Отправлено: Илья с поч.ящиком 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 от Май 02, 2006, 23:54 Корректно надо задачу ставить, молодой человек.
P.S. Кондуктор с пиздой Название: Нарисовать отрезок Отправлено: Илья с поч.ящиком garner от Май 03, 2006, 08:43 Согласен, что формулировать вопрос надо корректно. После длительной работы с простой задачкой, она кажется тривиальной с точки зрения формулировки, что необязательно для другого. Так что пробую еще раз, если что непонятно задавайте вопрос по существу.
На объекте QWidget рисуется множество отрезков, полигонов и других замечательных фигур, например. Это рисование назовем событием №2. Теперь необходимо на этом объекте нарисовать отрезок и потаскать одну из его сторон (P2) за курсором с фиксированным началом (P1). Т.е. следующим шагом я рисую, например, Красный отрезок сантиметров так в 20, пикселов так в 10, о прекрасный кондуктор. Появление данного отрезка - это событие №3. Теперь я хочу восстановить ситуацию на событие назад. Т.е. удалить отрезок. Насколько знаю - в библиотеке MFC для Windows это делается простой операцией XOR. В QT4 проще предварительного захвата прямоугольной (с диагональю P1-P2) части QWidget для последующего ее восстановления-перерисовки в QWidget::paintEvent (удаление отрезка) ничего не придумал. А если отрезок во всю диагональ экрана (дарагой кандухтар) частая перерисовка прямоугольника с такой диагональю займет значительное время - типа будет тормозить, морозить всю программу. Если что забыл пояснить - с удовольствием отвечу на ваши вопросы. Особенно буду рад "Кондуктору с пиздой", который, надеюсь, продемонстрирует и некоторое понимание QT. Название: Нарисовать отрезок Отправлено: comrade от Май 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 от Май 03, 2006, 14:01 Я в свое время делал так: рисовал всю картинку в пиксмап, потом в paintEvent
выводил нужный кусок пиксмапа на виджет и рисовал быстро изменяющиеся объекты, типа твоего отрезка. P.S. Иностранец с табуреткой Название: Нарисовать отрезок Отправлено: Илья с поч.ящиком garner от Май 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), а это заметно глазу сказывается на скорости. |