Название: Взаимодействие диалогового окна с главным окном Отправлено: codenameRazuka от Ноябрь 16, 2015, 17:49 В общем, пишу приложение, предоставляющее интерфейс конечному пользователю для взаимодействия с БД. Прежде чем начать что-либо делать с БД, нужно открыть таблицу. Для этого пользователь нажимает соответствующую кнопочку, появляется диалоговое окно, где в виде списка (QListWidget) представлены таблицы, а снизу две кнопки -- "Принять" и "Отмена". Причём кнопка "Принять" не сможет стать активной до того, пока не будет кликнут какой-либо элемент из списка. "Отмена" можно нажать в любом случае. Затем, необходимо информацию о выборе пользователя передать по нажатии "Принять", и в главном окне соотв. таблицу открыть, т.е. выполнить SQL-запрос, в который подставить имя элемента из списка.
Вопрос: каким образом следует обеспечить передачу строки-имени элемента от диалогового окна главному окну? Заранее извиняюсь за свой говнокод. Класс диалогового окна: Код: class ChooseTableDialog: public QDialog Класс главного окна(почти что вполне не доделан, привожу, лишь с тем чтобы имелось представление о том, с каким окном должно будет диалоговое окно взаимодействовать) Код: class Ui: QWidget Название: Re: Взаимодействие диалогового окна с главным окном Отправлено: __Heaven__ от Ноябрь 17, 2015, 11:52 Можно сигналами userChanged(int), userChanged(QString).
А можно написать метод для диалога типа getSelectedUserName() Название: Re: Взаимодействие диалогового окна с главным окном Отправлено: codenameRazuka от Ноябрь 17, 2015, 15:30 Добавил такой слот:
Код: void ChooseTableDialog::PassTableName() В конструкторе связал слот с соотв. сигналом: Код: connect(admitButton, SIGNAL(clicked()), this, SLOT(PassTableName())); Теперь мне необходимо в главном окне реализовать слот, принимающий испускаемый сигнал, правильно? И ещё. Кто знает, при однократном нажатии на элемент списка, значение поля данного элемента, к-рое проверяет метод isSelected(), устанавливается на true, или следует каким-либо образом его вручную установить, т.е. через setSelected()? Название: Re: Взаимодействие диалогового окна с главным окном Отправлено: __Heaven__ от Ноябрь 18, 2015, 10:36 Смотрите, создайте в классе диалога сигналы
userChanged(int userID) и userChanged(QString userName) В конструкторе класса присоедините их к сигналам списка Код Таким образом у нас диалог испускает сигналы о смене пользователя. Теперь наша задача в главном окне перехватить эти сигналы. Для этого создаём слот setUser(...) в качестве аргументов может быть int или QString Код А в конструкторе главного окна прикручиваем его к нашему сигналу Код Теперь при клике на каком-либо пользователе главное окно оповещается об этом. Только в вашем коде не видно, как вызывается сам диалог... Еще хочу добавить, что статический метод tr() можно использовать без указания QObject::, если класс является наследником QObject. Код Также tr не станет работать с не константами Цитировать Код
|