Программа не рисует линию с помощью 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?


person user3830784    schedule 29.04.2015    source источник


Ответы (1)


Вы поставили неправильную подпись. Вам нужно void paintEvent( QPaintEvent *e );. Рекомендуется использовать ключевое слово override для предотвращения таких ошибок.

person Dmitry Sazonov    schedule 29.04.2015