簡體   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