Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: lokoArt от Января 16, 2010, 14:48



Название: Вызов функции при обработке ok
Отправлено: lokoArt от Января 16, 2010, 14:48
У меня есть диалог, на нём есть QDialogButtonBox, когда на нём нажимается кнопка OK, нужно выполнить метод некого класса. Я поступил так, создал слот в классе этого диалога, потом создал коннект при нажатии на Ok, а в этом слоте вызываю метод некоторого класса. Вот вопрос: можно ли сделать тоже самое только без создания слота?


Название: Re: Глобальная переменная mainWindow
Отправлено: ilot от Января 16, 2010, 15:02
Но теперь мне просто интересно, всё таки как создать глобальнуб переменную типа QWidget?
Ну как вариант можно объявить глобальный указатель QWidget* pwgt = 0;


Название: Re: Вызов функции при обработке ok
Отправлено: zenden от Января 16, 2010, 16:09
и всё же не стоит так втихаря редактировать изначальные сообщения


Название: Re: Вызов функции при обработке ok
Отправлено: Marat(Qt) от Января 16, 2010, 16:13
если метод некого класса является слотом, или можно сделать его слотом, то можно сделать коннект слота некого класса с сигналом кнопки ок.
ещё есть вероятность, что вы вызываете диалог командой exec, и после нажатия на ok ваш диалог закрывается, тогда можно оформить это так:
Код:
if(MyDialog.exec()==1)NekiyClass::method();


Название: Re: Вызов функции при обработке ok
Отправлено: lokoArt от Января 16, 2010, 16:15
и всё же не стоит так втихаря редактировать изначальные сообщения

да...я тоже об этом подумал((( я думал можно будет все сообщения удалить, а нельяз(((


Название: Re: Вызов функции при обработке ok
Отправлено: lokoArt от Января 16, 2010, 16:41
если метод некого класса является слотом, или можно сделать его слотом, то можно сделать коннект слота некого класса с сигналом кнопки ок.
ещё есть вероятность, что вы вызываете диалог командой exec, и после нажатия на ok ваш диалог закрывается, тогда можно оформить это так:
Код:
if(MyDialog.exec()==1)NekiyClass::method();

эх вероятности нету...я вызываю методом show(). А как лучше вызывать?


Название: Re: Вызов функции при обработке ok
Отправлено: Marat(Qt) от Января 16, 2010, 16:55
нельзя вызывать методом show, это же диалог. Надо методом exec вызывать, он вернет сообщение о том, нажал ли пользователь OK или Отмену. В этом случае можно использовать приведенную выше конструкцию.


Название: Re: Вызов функции при обработке ok
Отправлено: BlackTass от Января 16, 2010, 16:57
нельзя вызывать методом show, это же диалог. Надо методом exec вызывать, он вернет сообщение о том, нажал ли пользователь OK или Отмену.
ну если диалог немодальный, то как раз show() и нужен. ТС не написал же какой у него диалог


Название: Re: Вызов функции при обработке ok
Отправлено: Marat(Qt) от Января 16, 2010, 17:03
нельзя вызывать методом show, это же диалог. Надо методом exec вызывать, он вернет сообщение о том, нажал ли пользователь OK или Отмену.
ну если диалог немодальный, то как раз show() и нужен. ТС не написал же какой у него диалог
Ну вообще я зря так категоричен, тут придется согласиться. Но суть диалога в том чтобы быть модальным. Т.о. учитывая ваше замечание, стоит лишь посоветовать ТС прочитать документацию по QDialog::exec() или литературу по диалогам в Qt


Название: Re: Вызов функции при обработке ok
Отправлено: BlackTass от Января 17, 2010, 23:15
Ну вообще я зря так категоричен, тут придется согласиться. Но суть диалога в том чтобы быть модальным. Т.о. учитывая ваше замечание, стоит лишь посоветовать ТС прочитать документацию по QDialog::exec() или литературу по диалогам в Qt
Суть диалога в том что он может быть модальным ) немодальные диалоги хоть и реже, но все же бывают нужны


Название: Re: Вызов функции при обработке ok
Отправлено: DS_tm от Января 18, 2010, 12:40
Суть диалогового окна, позволять пользователю взаимодействовать с приложением, от сюда и название. А каким это окно будет, зависит уже от его целей.

По существу, в таких случаях лучше использовать QDialogButtonBox (хотя можно использовать и отдельные кнопки, коннектя их к соответствующим слотам) и переопределять публичные слоты accept() и reject().