У меня есть программа, и я пытаюсь нарисовать линию на виджет. Вот код, который у меня есть:Программа не рисования линии с 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 создает виджет док-станции, который включает в себя другой виджет, который включает мой виджет рисования. Из проверки кода виджета чертежа в другой программе (которая работает) фактический чертеж строк должен выполняться просто отлично и нарисовать черную линию, которая видна на экране. Однако при тестировании с помощью этой программы я никогда не получаю строку, и не получаю отладочное сообщение «событие рисования».
Что мне не хватает, чтобы получить срабатывание paintEvent?