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