【发布时间】:2012-07-27 20:24:55
【问题描述】:
我有以下sn-p:
class A : public QWidget
{
Q_OBJECT
public:
A(QWidget *parent = 0);
void
setGeometry(int x, int y, int w, int h);
protected:
virtual void
resizeEvent(QResizeEvent *event);
}
class B : public A
{
Q_OBJECT
public:
B(A*parent = 0);
void
setGeometry(int x, int y, int w, int h);
protected:
virtual void
resizeEvent(QResizeEvent *event);
}
void
A::setGeometry(int x, int y, int w, int h)
{
QWidget::setGeometry(x, y, w, h);
}
void
A::resizeEvent( QResizeEvent * event)
{
QWidget::resizeEvent(event);
// common A and B stuff
}
void
B::setGeometry(int x, int y, int w, int h)
{
A::setGeometry(x, y, w, h);
}
void
B::resizeEvent( QResizeEvent * event)
{
A::resizeEvent(event);
}
在 A 的实例上调用 setGeometry 将触发 resizeEvent() 。在 B 的实例上调用 setGeometry 不会触发 resizeEvent()。这有什么问题吗?
编辑:
我可以在setGeometry 中成功地进行我需要的相同计算。现在,我的只是好奇。
【问题讨论】:
-
B::resizeEvent()的实现是否调用了A::resizeEvent()?
-
是在 B::resizeEvent() 的实现中,我调用了 A::resizeEvent() .B::resizeEvent() 没有被触发。当我根据文档调用 B::setGeometry() 时应该触发它。