2015-04-29 3 views
0

У меня есть программа, и я пытаюсь нарисовать линию на виджет. Вот код, который у меня есть:Программа не рисования линии с 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?

ответ

4

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

Смежные вопросы