Название: Начало работы с 2d графикой в Qt Отправлено: couatl от Апрель 05, 2009, 22:03 Смотрел темы, все вопросы уровнем больший чей мой, поэтому пишу тему.
Задача нарисовать что-то на Frame при возникновении к.-л. события (нажатие кнопки, запуск программы и т.д.) Как я это понимаю: сигнал нажатия кнопки связать с функцией, в которой я буду вызывать функции рисования. Но проблема даже не чтоб связать эти вещи. Я пока стою на шагу ранее. Все что я находил в книгах: "Чтобы начать рисовать на устройстве рисования (обычно это виджет), мы просто создаем объект QPainter и передаем ему указатель на устройство. Например: void MyWidget::paintExent(QPaintEvent *event) { QPainter painter(this) ... }" Но куда это вставлять и как использовать не понял. Все исходники, что я нашел, огромны и онять что там что для меня пока невозможно. Так вот заготовка куда я хочу вставить рисование: main.cpp Код: #include <QApplication> draw.h Код: #ifndef DRAW_H draw.cpp Код: #include <QtGui> Буду рад советам, хорошим ссылкам на примеры. Название: Re: Начало работы с 2d графикой в Qt Отправлено: spirit от Апрель 05, 2009, 22:29 поставь точку останова в деструктор mainDialog и посмотри вызывается ли он после закрытия проги. ;)
Название: Re: Начало работы с 2d графикой в Qt Отправлено: couatl от Апрель 05, 2009, 22:44 Вопросы:
как? зачем? и какое отношение имеет к рисованию на рамке? Название: Re: Начало работы с 2d графикой в Qt Отправлено: spirit от Апрель 05, 2009, 23:00 память не освобожнается.
либоже в стеке создавай окно либоже уничтожай его явно. Название: Re: Начало работы с 2d графикой в Qt Отправлено: couatl от Апрель 05, 2009, 23:30 Бланшет в начале своей книге пишет, что потеря памяти в малых приложениях мала и в начале не указал. Я не далеко зашел в изучении его книги - не успел.
Как я понял надо так: Код
так? Ну а если по теме? Очень важна Ваша помощь в начинании. Название: Re: Начало работы с 2d графикой в Qt Отправлено: spirit от Апрель 05, 2009, 23:41 объект опять таки не удалится из-за этого
Код есть три варианта 1. создавать объект в стеке Код 2. удалять явно Код 3. использую Qt::WA_DeleteOnClose Код по теме, почитай про QPainter про QPixmap (т.к. на нем тоже можно рисовать) ну и более навороченная штука это The Graphics View Framework описалово есть в доках. edited: ах да, забыл сказать, чтобы еще глянуть QWidget::paintEvent (тут-то собственно и нужно рисовать на виджете). Название: Re: Начало работы с 2d графикой в Qt Отправлено: couatl от Апрель 06, 2009, 06:33 Спасибо, иначе бы долго делал эту ошибку(не удаление окна), так как среди знакомых никто не разбирается в Qt.
По теме: Читал, из того что понял - делал следующие действия: сначала сделал так: draw.cpp Код: #include <QtGui> он он ругался, что paintFrame не декларирован. Потом подумал, может надо создать класс QMyFrame, который бы наследовал QFrame, и там прописать paintEvent, но счел эту идею ещё глупее, чем прошлую, которую реализировал и написал выше. По поводу QPixmap - я так понял эта некая аналогия Bitmap'а в VS и Delphi. на нем можно рисовать, а потом выгрузить все нарисованное на особый виджет. Название: Re: Начало работы с 2d графикой в Qt Отправлено: spirit от Апрель 06, 2009, 08:14 Спасибо, иначе бы долго делал эту ошибку(не удаление окна), так как среди знакомых никто не разбирается в Qt. ну тут в основном С++, специфический кьютишный метод -- это с использованием флага Qt::WA_DeleteOnClose :)он он ругался, что paintFrame не декларирован. все правильно ты думал, ничего глупого. :)Потом подумал, может надо создать класс QMyFrame, который бы наследовал QFrame, и там прописать paintEvent, но счел эту идею ещё глупее, чем прошлую, которую реализировал и написал выше. другой же вариант (без наследования) это установить ивент фильтр на фрейм и отлавливать его QPaintEvent в твоем диалоге, т.е. будет это выглядить следующим образом Код
По поводу QPixmap - я так понял эта некая аналогия Bitmap'а в VS и Delphi. на нем можно рисовать, а потом выгрузить все нарисованное на особый виджет. ну не помню как там в делфи, но да, на пиксмапе рисуешь и отображаешь при помощи QLabel.Название: Re: Начало работы с 2d графикой в Qt Отправлено: pastor от Апрель 06, 2009, 10:09 ну не помню как там в делфи, но да, на пиксмапе рисуешь и отображаешь при помощи QLabel. ...на пиксмапе рисуешь и отрисовываешь на виджете при помощи QPainter::drawPixmap(...) Название: Re: Начало работы с 2d графикой в Qt Отправлено: pastor от Апрель 06, 2009, 10:10 он он ругался, что paintFrame не декларирован. Добавь #include <QFrame> в таой draw.cpp А это что? Цитировать void paintFrame::paintEvent(QPaintEvent *) нужно: Цитировать void mainDialog::paintEvent(QPaintEvent *) и в нем рисуем Название: Re: Начало работы с 2d графикой в Qt Отправлено: spirit от Апрель 06, 2009, 10:19 он на фрейме хочет рисовать, а не на диалоге.
Название: Re: Начало работы с 2d графикой в Qt Отправлено: spirit от Апрель 06, 2009, 10:20 ну не помню как там в делфи, но да, на пиксмапе рисуешь и отображаешь при помощи QLabel. ...на пиксмапе рисуешь и отрисовываешь на виджете при помощи QPainter::drawPixmap(...) Название: Re: Начало работы с 2d графикой в Qt Отправлено: pastor от Апрель 06, 2009, 10:32 Вот простейший пример:
Код
Код
Код
Советую почитать про QPainter в ассистанте |