【发布时间】:2017-03-11 05:55:38
【问题描述】:
我正在尝试在 QWidget 上画一条线(和其他一些原语)。该 QWidget 在物理上位于另一个带有图片的小部件的“顶部”。我想在图片上画线和圆圈。
我已经知道如何画线了。我可以用这段代码做到这一点:
bool MySpecialWidget::eventFilter( QObject* watched, QEvent* event )
{
if (watched == this && event->type() == QEvent::Paint)
{
QPainter painter(this);
painter.translate(50, 50);
painter.setPen(QPen(Qt::blue, 12));
painter.setBrush(Qt::BrushStyle::SolidPattern);
painter.drawLine(0, 0, 200, 200);
}
return false;
}
但我真正想做的是放置一个小部件来保存图片,然后在它上面放置一个小部件来保存线条。像这样:
MySpecialWidget::MySpecialWidget(QWidget *parent) : QWidget(parent)
{
QRect position = QRect(30, 50, 600, 600);
pictureBox = new QLabel(parent);
pictureBox->setGeometry(position);
pictureBox->setPixmap(QPixmap(QString::fromUtf8(":/main/graphics/MyPicture.png")));
pictureBox->setScaledContents(true);
drawnElements = new QWidget(parent);
drawnElements->setGeometry(position);
drawnElements->raise();
this->installEventFilter(this);
}
然后绘制线条和图元,我想这样做:
bool MySpecialWidget::eventFilter( QObject* watched, QEvent* event )
{
if (watched == this && event->type() == QEvent::Paint)
{
QPainter painter(drawnElements);
painter.translate(50, 50);
painter.setPen(QPen(Qt::blue, 12));
painter.setBrush(Qt::BrushStyle::SolidPattern);
painter.drawLine(0, 0, 200, 200);
}
return false;
}
但这不起作用。什么都没有画出来。空白。
问题在于QPainter painter(drawnElements);这一行
如果我说QPainter painter(this);,它会绘制一些东西,但它不在子小部件上,而是在父小部件上。
【问题讨论】: