当前位置: 代码迷 >> QT开发 >> Qt画图解决思路
  详细解决方案

Qt画图解决思路

热度:91   发布时间:2016-04-25 04:08:53.0
Qt画图
我继承了QWidget;实现了一个类
  class MyPainter : public QWidget
 {
     Q_OBJECT
 public:
     void paintEvent(QPaintEvent *event);/////
     void draw(char type);
 signals:
 public:
     MyPainter(QWidget *parent = 0);
     ~MyPainter();
 };
//.cpp
void MyPainter::draw(char type)
 {
     QPainter painter(this);
     if(type == 'T')
     {
         painter.setRenderHint(QPainter::Antialiasing,true);
         painter.setPen(QPen(Qt::black,12,Qt::DashDotLine,Qt::RoundCap));
         painter.setBrush(QBrush(Qt::green,Qt::SolidPattern));
         painter.drawEllipse(80,80,400,240);
     }
 }
  void MyPainter::paintEvent(QPaintEvent *event)
  {
      draw('T');
  }

在MainWindow里调用
//响应的一个按钮事件消息
void MainWindow::on_page0_clicked()
 {
     QMessageBox::about(NULL, "About", "About this application");
     MyPainter m_painter(this);
     m_painter.paintEvent(NULL);//木有任何作用。。。。。
 }
Qt不是继承后重写paintEvent就可以了吗?为神马没效果啊。。。
调试下是
QPainter::begin: Paint device returned engine == 0, type: 1
 QPainter::setRenderHint: Painter must be active to set rendering hints
 QPainter::setPen: Painter not active
 QPainter::setBrush: Painter not active

------解决方案--------------------
protected:
void paintEvent(******)
这是Qt的虚函数,需要重画窗口的时候,Qt会自己调用,你只要把画图的代码写在里面就好了。
------解决方案--------------------
一般有这个报错:
QPainter::begin: Paint device returned engine == 0, type: 1
都是在paintEvent外使用画图了。
窗体的自画是要放在虚函数里的,楼上+1
------解决方案--------------------
这个比较费劲,Qt不支持这样的画法,需要一个QPixmap(声明为类成员变量)做中介,先在pixmap上画图(类似MFC),paintEvent里画到界面上。就是这样。
  相关解决方案