我有一個抽象類TableWidget,它繼承自QWidget。它實現了paintEvent。繼承自定義小部件
class TableWidget : public QWidget
{
Q_OBJECT
private:
int width;
int height;
public:
explicit TableWidget(QWidget *parent = 0);
virtual int getWidthInCells() = 0;
virtual int getHeightInCells() = 0;
virtual QString getCellText(byte x, byte y) = 0;
virtual QString getColumnLabel(byte a) = 0;
virtual QString getRowLabel(byte a) = 0;
byte getCellHighlight(byte x, byte y);
void setCellHighlight(byte x, byte y, bool highlighted);
void setHeight(int h);
void setWidth(int w);
protected:
void paintEvent(QPaintEvent *e);
signals:
public slots:
};
我試着測試TableWidget與虛擬類與旁邊沒有功能。
class DummyTable : public TableWidget {
public:
explicit DummyTable(QWidget *parent = 0) {}
int getWidthInCells() {return 2;}
int getHeightInCells() {return 2;}
QString getCellText(byte x, byte y) {return "0";}
QString getColumnLabel(byte a) {return QString(a);}
QString getRowLabel(byte a) {return QString(a);}
};
問題是paintEvent(在TableWidget.cpp中實現)永遠不會被調用。我注意到的第一個錯誤是DummyTable中缺少Q_OBJECT宏。我添加並測試了它,但是這導致無法正確終止。我必須徹底退出QT才能殺死這個進程。我看着QPushButton,它似乎和我一樣,除了包含Q_OBJECT。
那麼,如何才能正確調用paintEvent?
我把這看作是一種可能性,但事實並非如此; .ui文件給它一個寬度和高度。我也嘗試手動完成,但沒有奏效。 – Fabulinus