Частная переменная в Qt - PullRequest
       3

Частная переменная в Qt

0 голосов
/ 09 сентября 2011

У меня есть два класса в 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".

    class serialcom : public myform
    {
        Q_OBJECT
    public:
        int serialdev_init(void);
        serialcom(myform *parent=0);

    private:
        // some vars...
    };

Дескриптор файла serialfd получаетинициализируется в конструкторе для serialcom через serialdev_init ().Я проверил, он правильно инициализирован.Проблема в том, что когда вызывается кнопка SLOT для отправки, 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 Ответ

1 голос
/ 09 сентября 2011

Построение производного класса включает сначала создание подобъекта базового класса, а затем подобъект производного класса. Итак, у объекта производного класса есть два подобъекта.

 myform *trial = new myform;

trail имеет подобъекты типа QWidget, myform. Теперь у этого myform подобъекта есть своя собственная переменная-член (ы) serialfd, которая неинициализирована. Теперь trial не может получить доступ к serialcom членам, поскольку производный класс может получить доступ к членам базового класса, но в противном случае это не так.

 serialcom *serial = new serialcom(trial);

То же самое происходит и с этим утверждением, за исключением того, что serial имеет свои собственные подобъекты QWidget, myform, serial.

Дескриптор файла serialfd инициализируется в конструкторе для serialcom через serialdev_init ().

Теперь два субобъекта myform не имеют отношения. Вы устанавливаете serialfd этого подобъекта, но видите serialfd из trail подобъекта.

 trial->show();

Надеюсь, вы поняли, что делаете неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...