首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt画图解决思路

2013-01-28 
Qt画图我继承了QWidget;实现了一个类class MyPainter : public QWidget {Q_OBJECT public:void paintEvent

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里画到界面上。就是这样。

热点排行