как изменить компоненты mainform.ui из другой формы, и наоборот - PullRequest
0 голосов
/ 26 октября 2018

как я могу изменить компоненты mainform.ui (Qlabels, comboBox и т. Д.) Из другой формы и наоборот.Например: 1-mainform.ui имеет кнопку (так называемую «button1»), когда я нажимаю button1, я хочу отключить кнопку, расположенную в otherform.ui (так называемую «button2») 2 - когда я нажимаю button2 другой формы.ui, я хочу очистить comboBox, расположенный в mainform.ui

В ex # 1: я не знаю, как ссылаться на otherform.ui, используя путь> otherform obj;obj.ui.button2.disabled ();компилятор покажет мне ошибку!.clear () ;, когда я запускаю приложение, ошибка говорит, что mainform * ui является частной, поэтому я захожу в mainform.h и делаю его общедоступным, тогда никаких сигналов об ошибках не происходит, но ничего не происходит.

кто-нибудь может мне помочь?извините за мой английский.

1 Ответ

0 голосов
/ 27 октября 2018

Вы можете использовать механизмы SIGNAL и SLOT для отправки щелчков мышью из одной формы в другую.Единственное необходимое требование - чтобы формы, на которые вы ссылаетесь, были обработаны как 'Q_Object'.

Пример

Форма 1

#include <QObject>                  //must include this

class Form1 : public QObject
{
 Q_OBJECT                            //must include this 

 public:
    Form1(){ connect(&btn1, SIGNAL(clicked()), this, SLOT(clicked_btn1())); }

 private:
    QPushButton btn1;

 public slots:                       /*slots are methods which are triggered when 
                                       signals are emitted */
    void disable_btn(){btn1.disable();}
    void clicked_btn1(){emit btn1_signal();}//signals are triggered by 'emit'

 signals:                           /*signals are events waiting to be triggered*/
    void btn1_signal();

};

Форма 2

#include <QObject>                  //must include this

class Form2 : public QObject
{
 Q_OBJECT                            //must include this 

 public:
    Form2(){ connect(&btn2, SIGNAL(clicked()), this, SLOT(clicked_btn2())); }

 private:
    QPushButton btn2;
    QComboBox cmb;

 public slots:                       /*slots are methods which are triggered when 
                                       signals are emitted */
    void clear_cmb(){cmb.clear();}
    void clicked_btn2(){emit btn2_signal();}//signals are triggered by 'emit'

 signals:                           /*signals are events waiting to be triggered*/
    void btn2_signal();

;};

Main

//include all the header files of form1 and form2
//include <QObject> file and Q_OBJECT

Form1 *form_1 = new Form1();
Form2 *form_2 = new Form2();

//connecting signals from one form to slots of another form
connect(form_1, SIGNAL(btn1_signal()), form_2, SLOT(disable_btn()))
connect(form_2, SIGNAL(btn2_signal()), form_1, SLOT(clear_cmb()))

Таким образом, кнопка одного объекта может быть отключена нажатием кнопки внутри другого объекта.

Поскольку это большая тема, вот ссылка из Qt с дополнительными пояснениями и простыми примерами http://doc.qt.io/archives/qt-4.8/signalsandslots.html

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