Здравствуйте!
Моя цель из любого места программы(в 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. Если это так, то помогите проследить как его нужно построить.
Спасибо за внимание!