Qt中的私有变量

时间:2011-09-09 05:58:21

标签: c++ qt

我在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();
   }

欢迎任何其他建议。

1 个答案:

答案 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();

希望你能理解你做错了什么。