Qt画图

baobaodediaozhui 2012-09-24 04:50:28
我继承了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
...全文
596 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
YorkChen1989 2013-01-22
  • 打赏
  • 举报
回复
引用 6 楼 baobaodediaozhui 的回复:
引用 5 楼 的回复:一般有这个报错: QPainter::begin: Paint device returned engine == 0, type: 1 都是在paintEvent外使用画图了。 窗体的自画是要放在虚函数里的,楼上+1 我现在不是需要窗体自画,而是我要在上面画图。就像VC下的dc.MoveTo(),dc.LineTo()那样的... 怎么……
在QWidget::pantevent() { 加入QPainterPath,这个类有你要的lineto,moveto的函数。你画好之后,调用一下painter。drawPath就行了。 }
baobaodediaozhui 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
一般有这个报错:
QPainter::begin: Paint device returned engine == 0, type: 1
都是在paintEvent外使用画图了。
窗体的自画是要放在虚函数里的,楼上+1
[/Quote]
我现在不是需要窗体自画,而是我要在上面画图。就像VC下的dc.MoveTo(),dc.LineTo()那样的...
怎么弄呢?
jdwx 2012-09-25
  • 打赏
  • 举报
回复
还有另外的办法:储存画图的数据(例如线的端点),paintEvent里把数据画到界面上去。
jdwx 2012-09-25
  • 打赏
  • 举报
回复
这个比较费劲,Qt不支持这样的画法,需要一个QPixmap(声明为类成员变量)做中介,先在pixmap上画图(类似MFC),paintEvent里画到界面上。就是这样。
haltwang 2012-09-25
  • 打赏
  • 举报
回复
一般有这个报错:
QPainter::begin: Paint device returned engine == 0, type: 1
都是在paintEvent外使用画图了。
窗体的自画是要放在虚函数里的,楼上+1
jdwx 2012-09-24
  • 打赏
  • 举报
回复
protected:
void paintEvent(******)
这是Qt的虚函数,需要重画窗口的时候,Qt会自己调用,你只要把画图的代码写在里面就好了。
baobaodediaozhui 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
重写QWidget::paintEvent();把你写的函数放到这个事件里
[/Quote]
我在子类里重写了的啊!
paintEvent()是一个事件的话,不能直接用对象调用还是怎么???
  • 打赏
  • 举报
回复
重写QWidget::paintEvent();把你写的函数放到这个事件里
baobaodediaozhui 2012-09-24
  • 打赏
  • 举报
回复
木人么?

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧