【发布时间】:2014-06-17 01:05:36
【问题描述】:
我有一个抽象类 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?
【问题讨论】:
标签: c++ qt inheritance widget