Название: Подключение диалогового окна Отправлено: Петр91 от Май 22, 2011, 15:19 Не могу разобраться в диалоговом окне, искал в инете и в справке и ничего толкового!! Описаны проблемы а руководства нет. Дайте ссылку, или лучше напишите код я сам разберусь!
Открыл creator создал форму, открыл его еще раз и создал QDialog форму диалогового окна. Объясните как подключить окно, и вызвать его! Название: Re: Подключение диалогового окна Отправлено: Ovoshlook от Май 22, 2011, 15:22 Ну смотря для чего окно
Самое простое-вот так сделать: QMessageBox::information(0,tr("information"),tr("No tabs for adding"),QMessageBox::Ok|QMessageBox::NoButton); Это оно информации. Если нужно окно с выбором чего либо то лучше самому аписать, положить туда пару кнопок и связать их через connect с нужными функциями. Название: Re: Подключение диалогового окна Отправлено: LisandreL от Май 22, 2011, 18:13 Открыл creator создал форму, открыл его еще раз и создал QDialog форму диалогового окна. Объясните как подключить окно, и вызвать его! В функции главного окна:Код
Название: Re: Подключение диалогового окна Отправлено: Петр91 от Май 23, 2011, 05:32 Задача в сделать в отдельном окне параметры программы. Вообщем если объясните как сдлеать, все остальное станет ясно.
Есть главная форма с кнопкой "Параметры" и Текстлэйблом. При нажатии на кнопку открывается новое окно(форма) также с кнопкой, при нажатии на которую в главной форме в текстлэйбле отобразиться число. Напишите пожалуйста код! И мне сразу все станет ясно. Создал форму, создал диалоговое окно с кнопкой, а что дальше? Название: Re: Подключение диалогового окна Отправлено: LisandreL от Май 23, 2011, 06:21 Я ж вам написал, что не show() диалог надо показывать, а exec().
Название: Re: Подключение диалогового окна Отправлено: Петр91 от Май 23, 2011, 07:20 Спасибо большое!!! Да все работает! Теперь остался самый главный вопрос, и можно приступать к работе! Имея кнопку на диалоговом окне, как ее связать с лэйблом на главной форме?
Пытаюсь сделать через connect но что то не так. void Dial::on_pushButton_clicked() { connect(Dial,SIGNAL(on_pushButton_clicked()),TKM,SLOT(ttl())); } Где Dial - класс диалогового окна, TKM - главная форма, on_pushButton_clicked() собственно нажатие кнопки, ttl() описаный мною слот для копирования в лэйбл текста. пишет ошибку expected primary-expression before ',' token Название: Re: Подключение диалогового окна Отправлено: Mikhail от Май 23, 2011, 07:37 Скорее всего ваше диалоговое окно не знает ничего о главной форме, поэтому ругается и скорее всего на указатель главного окна TKM.
connect лучше делать в главной форме при создании диалоговог окна. В этом месте есть указатель на обе формы connect(Dial,SIGNAL( PushButton_clicked()),this,SLOT(ttl())); Здесь PushButton_clicked() зто сигнал диалогового окна В диалоговом окне соедините два сигнала - кнопки и сигнал окна connect( this,SIGNAL( on_pushButton_clicked()), SIGNAL(PushButton_clicked())); Название: Re: Подключение диалогового окна Отправлено: LisandreL от Май 23, 2011, 07:46 Связывайте не в диалоге (и уж тем более не в самом слоте), а перед его показом.
Если надо передавать число - логично его передать как параметр сигнала. Т.е. в диалоге объявляете сигнал: Код
Нажатию кнопки его эмитите: Код
Там где по кнопке показываете диалог - делаете коннект: Код
Исправляете слот ttl(int) так, чтобы он был с параметром и реализуете. =========================================================== Но вообще правильнее с диалогом работать вот так: 1) По кнопке параметры вызываем диалог: Нажатию кнопки его эмитите: Код
2) В классе диалога объявляем паблик параметр ttl: Код
3) По нажатию на кнопку ОК диалога делаем: Код
Название: Re: Подключение диалогового окна Отправлено: Петр91 от Май 23, 2011, 08:13 Нажатию кнопки его эмитите: Код
Вы наверное имели в виду pushbutton которая принадлежит Dial а не lineEdit. Сделал все как вы говорили, такая же ошибка, правда раньше их две одинаковых было а теперь одна. В идеале мне ничего не надо передавать, а на диалоговом окне надо сделать, 4 радиобатана которые будут отображать соответствующие textEdit на главной форме. Как это сделать я знаю а вот саму связь устроить не получается. void TKM::on_pushButton_clicked() { Dial dial; dial.exec(); connect(&Dial,SIGNAL(sendTtl(int)),this,SLOT(ttl(int))); } expected primary-expression before ',' token Название: Re: Подключение диалогового окна Отправлено: LisandreL от Май 23, 2011, 08:17 Цитировать Вы наверное имели в виду pushbutton которая принадлежит Dial а не lineEdit. Число то у вас где вводится? Не в кнопку же.Цитировать connect(&dial,SIGNAL(sendTtl(int)),this,SLOT(ttl(int))); Вы переменную dial должны связывать, а не тип Dial.Название: Re: Подключение диалогового окна Отправлено: Петр91 от Май 23, 2011, 11:07 Но вообще правильнее с диалогом работать вот так: 1) По кнопке параметры вызываем диалог: Нажатию кнопки его эмитите: Код
2) В классе диалога объявляем паблик параметр ttl: Код
3) По нажатию на кнопку ОК диалога делаем: Код
Аааааааааа спасибо большое!!! Все работает. Я наверно вас уже достал, но лаба еще не сделала) Остались мелкие вопросы. после того как я вызываю форму .exec() я не могу выйти за ее пределы. теперь мне нужная другая форма но уже такая, что бы можно было кликать на главную форму, причем диалоговое окно должно оставаться поверх. Название: Re: Подключение диалогового окна Отправлено: kambala от Май 23, 2011, 13:10 Код только тогда надо подписаться на сигнал accepted() (и rejected() если нужно), чтоб знать когда была нажата кнопка ОК или Cancel либо вместо QDialog вообще QWidget использовать Название: Re: Подключение диалогового окна Отправлено: vasilii_ru от Февраль 26, 2012, 02:11 Спасибо LisandreL :)
|