QPainter问题
我看书上,和网上一些教程,为什么我要画一条直线,都要放到paintEvent里面,如果我需要在程序运行中再画一个图像我要怎么办呢?
能不能放到自定义的槽去实现画线? --------------------编程问答--------------------
规定如此
答案你不是开头就给出来了么?
不行(如果你想折腾的话,除外) --------------------编程问答-------------------- 应该可以把 槽函数里用Qpainter在painterdevice里画
paintEvent是在窗口可见情况下画 就直接画出来了 --------------------编程问答-------------------- 似乎不行啊 刚写在别的事件里提示不活动 --------------------编程问答-------------------- paintevent中画
repaint调用画 --------------------编程问答-------------------- 其实如果你想放在自定义槽函数里面话是可以的,你可以自定义一个信号连接到你那个槽,然后再在paintEvent里面emit你那个信号 --------------------编程问答-------------------- Qt官方一个家伙给的解释是:simply,u can't --------------------编程问答-------------------- 在paintevent里面画,然后在需要画出的地方调用update就行。 --------------------编程问答-------------------- draw操作必须放到paintevent中
调用系统paintevent事件即可,比如update或repaint
--------------------编程问答-------------------- 遇到了同样的问题,似乎无解。
需求如下: 在鼠标按下时画一条线,鼠标松开,线消失。
刚开始尝试在mousePressEvent使用QPainter,发现无效,查资料得知QPainter只能在paintEvent里面使用(看来远不如windows的device context方便),本想再折腾折腾,又怕麻烦,只好放弃。 --------------------编程问答--------------------
这个不难吧。
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);
}
补充:移动开发 , Qt