QPainter问题

yu22122 2011-06-04 03:00:41
我看书上,和网上一些教程,为什么我要画一条直线,都要放到paintEvent里面,如果我需要在程序运行中再画一个图像

我要怎么办呢?

能不能放到自定义的槽去实现画线?
...全文
217 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhp 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 maximin 的回复:]
遇到了同样的问题,似乎无解。

需求如下: 在鼠标按下时画一条线,鼠标松开,线消失。

刚开始尝试在mousePressEvent使用QPainter,发现无效,查资料得知QPainter只能在paintEvent里面使用(看来远不如windows的device context方便),本想再折腾折腾,又怕麻烦,只好放弃。
[/Quote]

这个不难吧。

void ChatWindow::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton){
flag = true;
repaint();
}
}

void ChatWindow::mouseReleaseEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton){
flag = false;
repaint();
}
}

//只需要在鼠标事件中,repaint就可以了,paintEvent中根据标志来重绘。
void ChatWindow::paintEvent(QPaintEvent *e)
{
QPainter p(this);
if(flag){
p.setPen(Qt::red);
p.setPen(Qt::DashDotLine );

p.drawLine(this->rect().x(),this->rect().y(),
this->rect().width() / 2,this->rect().height() / 2);
}
return QWidget::paintEvent(e);
}
maximin 2011-10-18
  • 打赏
  • 举报
回复
遇到了同样的问题,似乎无解。

需求如下: 在鼠标按下时画一条线,鼠标松开,线消失。

刚开始尝试在mousePressEvent使用QPainter,发现无效,查资料得知QPainter只能在paintEvent里面使用(看来远不如windows的device context方便),本想再折腾折腾,又怕麻烦,只好放弃。
Methodor 2011-06-10
  • 打赏
  • 举报
回复
draw操作必须放到paintevent中
调用系统paintevent事件即可,比如update或repaint
ch888168930 2011-06-08
  • 打赏
  • 举报
回复
Qt官方一个家伙给的解释是:simply,u can't
chenwenluan 2011-06-08
  • 打赏
  • 举报
回复
在paintevent里面画,然后在需要画出的地方调用update就行。
shemgawa 2011-06-07
  • 打赏
  • 举报
回复
其实如果你想放在自定义槽函数里面话是可以的,你可以自定义一个信号连接到你那个槽,然后再在paintEvent里面emit你那个信号
sduxiaoxiang 2011-06-04
  • 打赏
  • 举报
回复
paintevent中画

repaint调用画
碎炎 2011-06-04
  • 打赏
  • 举报
回复
似乎不行啊 刚写在别的事件里提示不活动
碎炎 2011-06-04
  • 打赏
  • 举报
回复
应该可以把 槽函数里用Qpainter在painterdevice里画
paintEvent是在窗口可见情况下画 就直接画出来了
dbzhang800 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 yu22122 的回复:]
我看书上,和网上一些教程,为什么我要画一条直线,都要放到paintEvent里面,
[/Quote]
规定如此
[Quote=引用楼主 yu22122 的回复:]如果我需要在程序运行中再画一个图像
我要怎么办呢?
[/Quote]
答案你不是开头就给出来了么?
[Quote=引用楼主 yu22122 的回复:]
能不能放到自定义的槽去实现画线?
[/Quote]
不行(如果你想折腾的话,除外)

16,173

社区成员

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

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