Russian Qt Forum
Ноябрь 25, 2024, 06:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование без QPaintEvent. Возможно?  (Прочитано 6847 раз)
AAXEE
Гость
« : Октябрь 19, 2008, 09:31 »

Здравствуйте!
Моя цель из любого места программы(в main, из функции) рисовать на какой-то области.
Единственное, что я нашел -это Q3Canvas- но " It is provided to keep old source code working. We strongly advise against using it in new code."
Вот, что я смог сделать:
Progr1
canvas.h
Код:
#ifndef CANVAS_H
#define CANVAS_H

#include <QWidget>

class Canvas : public QWidget
{
    Q_OBJECT

protected:
    void paintEvent(QPaintEvent *event);
   
};

#endif
canvas.cpp
Код:
#include <QtGui>

#include "canvas.h"

void Canvas::paintEvent(QPaintEvent * /* event */)
{
    QPainter painter(this);
    painter.drawEllipse(80,80,50,50) ;

}
main.cpp
Код:
#include <QApplication>

#include "canvas.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Canvas myCanvas;
    myCanvas.show();
    return app.exec();
}

Такой подход к рисованию указан почти везде, но мне не понятно как это можно удобно использовать. Есть только один paintEvent, а если я хочу сначала круг, а потом квадрат нарисовать?

Идем дальше:
Prog2
main.cpp
Код:
#include <QApplication>
#include <QtGui>
#include <QWidget>

int main( int argc , char *argv[] )
{
   QApplication app( argc , argv ) ;
   
   QWidget myWidget;
   QPainter painter ;
   painter.begin( &myWidget ) ;
   painter.drawEllipse(80,80,50,50) ;
   painter.end() ;
   myWidget.show() ;
   
   return app.exec() ;
}
Все прекрасно компилируется, но при выполнении ничего не рисуется и выводится сообщение
Цитировать
QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::end: Painter not active, aborted

Вопрос:
В последнем коде можно что-то исправить, что бы заработало?  И как это сделать?
Если нет, то как мне реализовать что-то вроде myCanvas->drawEllipse(100,100,50,50) из любого места программы?
Где то читал, что придется создавать наследуемый классс для QPainter. Если это так, то помогите проследить как его нужно построить.

Спасибо за внимание!
Записан
Rcus
Гость
« Ответ #1 : Октябрь 19, 2008, 10:31 »

Если вам надо именно рисовать в определенной области, то можете почитать документацию по The Graphics View Framework
Записан
shadone
Гость
« Ответ #2 : Октябрь 19, 2008, 15:08 »

Другой вариант - в вашем видете ввести "состояние" - нечто что будет говорить ему что именно должно быть нарисовано. Еще один вариант (менее оптимальный в общем случае) - где-то в общем месте хранить QPixmap на котором рисовать откуда вздумается, а в виджете, в paintEvent рисовать этот самый pixmap.
Записан
AAXEE
Гость
« Ответ #3 : Октябрь 20, 2008, 15:49 »

Всем спасибо!
Если вам надо именно рисовать в определенной области, то можете почитать документацию по The Graphics View Framework
Кажется это то что нужно.
Единственное, не понятно зачем нужен QPainter, если есть QGraphicsView и QGraphicsScene.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #4 : Октябрь 20, 2008, 16:39 »

Единственное, не понятно зачем нужен QPainter, если есть QGraphicsView и QGraphicsScene.
Это один из низкоуровневых классов для рисования. Он очень нужен Улыбающийся
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
AAXEE
Гость
« Ответ #5 : Октябрь 20, 2008, 20:27 »

Но что бы просто рисовать на форме и изменять координаты объектов на рисунке, ведь не стоит заморачиваться с QPainter?
Записан
lex_newton
Гость
« Ответ #6 : Ноябрь 06, 2008, 15:42 »

Когда важна скорость отрисовки - это очень полезно. Вот сейчас, например, мне необходимо написать виджет для быстрой отрисовки графика сигнала(поигрался с QWT, не устроила скорость работы... на 250000 точек уже тормоза) у меня в среднем порядка 25000000 точек на графике будет. вот отобрази их графикс вьювом без особо заметных тормозов :]
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.106 секунд. Запросов: 23.