程序不使用 QPainter 画线

Posted

技术标签:

【中文标题】程序不使用 QPainter 画线【英文标题】:Program not drawing line with QPainter 【发布时间】:2015-04-29 19:03:11 【问题描述】:

我有一个程序,我试图在一个小部件上画一条线。这是我的代码:

标题:

#include <QWidget>
#include <QtWidgets>
class DrawingWidget : public QWidget
    Q_OBJECT
public:
    explicit DrawingWidget(QWidget *parent = 0);
    ~DrawingWidget();
    QSize minimumSizeHint() const;
    QSize sizeHint() const;
protected:
    void paintEvent(QEvent *);

我在实际程序中也有一个槽,但目前在我试图找到这个错误时它被注释掉了。

代码:

DrawingWidget::DrawingWidget(QWidget *parent) : QWidget(parent)
update();

DrawingWidget::~DrawingWidget()

QSize DrawingWidget::minimumSizeHint() const
    return QSize(50,30);

QSize DrawingWidget::sizeHint() const
    return QSize(150,50);

void DrawingWidget::paintEvent(QEvent *)
    qDebug() << "paint event called";
    QPainter(this);
    QPen drawPen(Qt::black, 3);
    QPoint leftLinePoint(10,20);
    QPoint rightLinePoint(50,20);
    painter.setPen(drawPen);
    painter.drawLine(leftLinePoint, rightLinePoint);

此小部件包含在另一个程序中,该程序具有以下构造函数:

DataDisplayWidget::DataDisplayWidget(QWidget *parent) : QWidget(parent)
//other unrelated code
displayBox = new QGroupBox("Lines");
QBoxLayout *mainLayout = new QBoxLayout(QBoxLayout::LeftToRight);
QGridLayout *displayLayout = new QGridLayout;
myWidget = new DrawingWidget;
displayLayout->addWidget(myWidget);
displayBox->setLayout(displayLayout);
//add other things to main layout
mainLayout->addWidget(displayBox);
setLayout(mainLayout);

然后在主窗口中使用DisplayDataWidget,代码如下:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
//a bunch of unrelated constructor code
createDataDisplayWidget();
//more unrelated code

void MainWindow::createDataDisplayWidget()
DataDisplayWidget *thisWidget = new DataDisplayWidget;
QDockWidget *dock = new QDockWidget("Displayed Data", this);
dock->setWidget(thisWidget);
dock->setAllowedAreas(Qt::BottomDockWidgetArea);
addDockWidget(Qt::BottomDockWidgetArea, dock);
//connections

所以,一个简短的总结。我的程序从 main.cpp 开始,并启动一个 QMainWindow 对象。然后,此 QMainWindow 对象创建一个停靠小部件,其中包括另一个小部件,其中包括我的绘图小部件。通过在另一个程序(正在运行)中测试绘图小部件代码,线条的实际绘制应该运行良好并绘制一条在屏幕上可见的黑线。但是,在使用这个程序进行测试时,我从来没有得到这条线,也没有得到调试消息“paint event called”。

为了能够触发paintEvent,我缺少什么?

【问题讨论】:

【参考方案1】:

您输入了错误的签名。你需要void paintEvent( QPaintEvent *e );。最好使用override 关键字来防止此类错误。

【讨论】:

以上是关于程序不使用 QPainter 画线的主要内容,如果未能解决你的问题,请参考以下文章

QT绘图基础

使用 QPainter 绘图

QGuiApplication没有显示使用QPainter和QPdfWriter

Qt:在子部件上使用 QPainter

QPainter::begin 在调试模式下使程序崩溃

Qt中QPainter的使用