[英]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.