繁体   English   中英

程序未用QPainter画线

[英]Program not drawing line with QPainter

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

标题:

#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事件被调用”。

我缺少什么能够触发paintEvent?

您输入了错误的签名。 您需要void paintEvent( QPaintEvent *e ); 优良作法是使用override关键字来防止此类错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM