[问题]关于qt的一个疑问

软件和网站开发以及相关技术探讨
回复
头像
anod221
帖子: 76
注册时间: 2007-04-10 18:36
来自: 西安

[问题]关于qt的一个疑问

#1

帖子 anod221 » 2007-09-09 22:55

最近学qt,能小编一点东西了,忽然今天发现一些事情,敬请高手解答

这样的代码:
class anoPushButton:public QWidget
{
Q_OBJECT
public:
anoPushButton():QWidget(), button("Hello World", this){
QWidget::setGeometry(QRect(0,0, 100,50));
button.setGeometry(QRect(10,10, 80, 30));
connect(&button, SIGNAL(clicked()), this, SLOT(OnClk()));
}
private:
QPushButton button;
public slots:
void OnClk()
{
emit clk();
}
void show() //!!!!!!!!!!!!!!!!!!!!
{
QWidget::show();
button.show();
}
signals:
void clk();
};

后来我想这个show函数不要行不行,注释掉后编译得到一样的结果,我就不明白了,为什么它能够自己自动调用QPushButton的show呢?是不是在注册button的那个parent的指针可能调用了像这样的一个parent->AddWidgetItem的函数来用一个表保存自己的widget,在show的时候遍历这个表来逐个调用其show函数呢?
头像
boydd
帖子: 255
注册时间: 2007-05-10 19:42
来自: 南京, Deutschland, Karlsruhe
联系:

#2

帖子 boydd » 2007-09-10 1:03

基类里有同名的虚函数
头像
anod221
帖子: 76
注册时间: 2007-04-10 18:36
来自: 西安

#3

帖子 anod221 » 2007-09-10 12:28

我知道有这个函数,所以在覆盖的时候还先对其进行了调用。我是问的关于QWidget这个类,如果我不重载show,程序也能够把button给画出来。问题是作为一个父类,它是如何知道子类里面有一个button的成员,并在show函数不调用的时候能够把这个button给画出来呢?

我的想法是在父类QWidget中有一个用来保存其成员为QWidget类型的一个表(可能是链表),在调用button的构造函数的时候,就把这个button加进表里面,这样就保存了其成员。在show被调用的时候,父类中的QWidget::show会遍历该表,把每一个可见的成员分别调用其绘制自己的函数,所以我们就不用重载其中的show函数,其父类中的show函数也可以把所有的控件给画出来
回复