我在QT下有两个类,一个用于创建表单,另一个用于在串行端口上发送收集的数据。有一个按钮可以在串口上提交和发送信息。第一个类“myform”包含文件描述符变量和提交按钮的插槽函数。
class myform: public QWidget
{
Q_OBJECT
private slots:
void submitclicked(void);
public:
myform(QWidget *parent = 0);
// some vars...
QPushButton *submit;
int serialfd;
};
第二类“serialcom”继承了第一个类,因为我想在“serialcom”类中实现slot函数。
class serialcom : public myform
{
Q_OBJECT
public:
int serialdev_init(void);
serialcom(myform *parent=0);
private:
// some vars...
};
serialfd文件描述符通过serialdev_init()在serialcom的构造函数中初始化。我检查过,它已正确初始化。问题是当调用SLOT for submit按钮时,serialfd具有垃圾值(我的意思是在submitclicked()槽内),而不是初始值。
它不应该保留价值,或者我认为这是错误的吗?我对这个QT甚至C ++业务都很陌生,所以请注意我的愚蠢......如果有的话......
这是主要功能......
int main(int argc,char **argv)
{
QApplication app(argc,argv);
myform *trial = new myform;
serialcom *serial = new serialcom(trial);
trial->show();
return app.exec();
}
欢迎任何其他建议。
答案 0 :(得分:1)
派生类构造涉及基类子对象构造,首先是派生类子对象。因此,派生类对象有两个子对象。
myform *trial = new myform;
trail
有一个QWidget, myform
类型的子对象。现在这个myform
子对象拥有它自己的成员变量serialfd
,它是未初始化的。现在,trial
无法访问serialcom
成员,因为派生类可以访问基类成员,但否则不是。
serialcom *serial = new serialcom(trial);
除了serial
拥有自己的子对象QWidget, myform, serial
之外,这句话也是如此。
serialfd文件描述符通过serialdev_init()在serialcom的构造函数中初始化。
现在两个myform
子对象没有关系。您正在设置此子对象的serialfd
,但要查看serialfd
子对象的trail
。
trial->show();
希望你能理解你做错了什么。