Russian Qt Forum
Ноябрь 27, 2024, 13:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: кнопка Apply не работает в ButtonBox  (Прочитано 22335 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Июнь 09, 2010, 15:53 »

нарисовал бокс с 3-мя Ok, Cancel, Apply (для последней взвел флажок в редакторе бокса в QDesigner), бокс поместил на Qdialog

2 первые кнопки сами соединились со слотами диалога, переопределил их, все хорошо, при нажатии Ok вызывается сначала accept() потом done(), при Cancel сначала reject() потом done()

но кнопка Apply, хоть и стандартная, но никуда не присоединилась, и че-то сразу как-то не видно, как сделать, чтобы при ее нажатии вызывался только accept() как должно быть по ее логике

в дизайнере при редактировании связей от нее нет сигнала, и в описании бокса не видно, как добраться до кнопки по ее номеру или названию
Записан

2^7-1 == 127, задумайтесь...
Kolobok
Гость
« Ответ #1 : Июнь 09, 2010, 16:41 »

Не знаю, чем ты читаешь...

QDialogButtonBox::clicked ( QAbstractButton * button )
QDialogButtonBox::buttonRole ( QAbstractButton * button )
QDialogButtonBox::ApplyRole
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Июнь 09, 2010, 17:14 »

ну и толку???

это же надо самому разобрать, что нажата именно кнопка Apply и вызывать слот accept()

тогда как правильно было бы сразу соединить сигнал этой кнопки с accept() и ничего разбирать не надо

добраться до кнопки я хочу, чтобы в конструкторе диалога connect сделать, раз дизайнер сам не смог, хотя 100% мог бы
« Последнее редактирование: Июнь 09, 2010, 17:16 от Гурман » Записан

2^7-1 == 127, задумайтесь...
BRE
Гость
« Ответ #3 : Июнь 09, 2010, 17:22 »

тогда как правильно было бы сразу соединить сигнал этой кнопки с accept() и ничего разбирать не надо
Это не правильно.
И accept и reject закрывают диалог, а для apply этого не требуется.
Посмотри как они описаны в исходниках:
Код
C++ (Qt)
void QDialog::accept()
{
   done(Accepted);
}
 
void QDialog::reject()
{
   done(Rejected);
}
 

добраться до кнопки я хочу, чтобы в конструкторе диалога connect сделать, раз дизайнер сам не смог, хотя 100% мог бы
Посмотри на:
QPushButton * QDialogButtonBox::button ( StandardButton which ) const
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Июнь 09, 2010, 17:34 »

Цитировать
Посмотри на:
QPushButton * QDialogButtonBox::button ( StandardButton which ) const

я и попытался его использовать, но что-то не получилось, и... рабочий день закончился, исходников дома нет

Цитировать
accept и reject закрывают диалог, а для apply этого не требуется.
Посмотри как они описаны в исходниках:

кхе... это несколько неожиданно... могли бы и предупредить  Грустный

я подумал сначала, кнопка ОК через промежуточный слот сначала сигнал посылает в accept() потом в done() - в первый, чтобы принять изменения, во второй чтобы закрыть диалог, не совсем понятно, нафига тогда эти accept() и reject(), можно было бы спокойно обойтись одним единственным done(int), не было бы повода для заблуждений

и как-то странно - кнопки Apply и десяток других "стандартных" есть, а у QDialog слотов готовых для них... нет
« Последнее редактирование: Июнь 09, 2010, 17:39 от Гурман » Записан

2^7-1 == 127, задумайтесь...
BRE
Гость
« Ответ #5 : Июнь 09, 2010, 17:36 »

кхе... это несколько неожиданно... могли бы и предупредить  Грустный
Куда уж больше предупреждать:
Цитировать
void QDialog::accept ()   [virtual slot]
Hides the modal dialog and sets the result code to Accepted.
Подмигивающий
Записан
BRE
Гость
« Ответ #6 : Июнь 09, 2010, 17:38 »

можно было бы спокойно обойтись одним единственным done(int), не было бы повода для заблуждений
Попробуй соединить сигнал QPushButton::clicked() со слотом QDialog::done( int ).  Подмигивающий
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #7 : Июнь 09, 2010, 17:43 »

можно было бы спокойно обойтись одним единственным done(int), не было бы повода для заблуждений
Попробуй соединить сигнал QPushButton::clicked() со слотом QDialog::done( int ).  Подмигивающий

если бы сигнал имел вид QPushButton::clicked(ButtonRole role), а слот QDialog::done(ButtonRole role) все бы замечательно соединялось!

Цитировать
Куда уж больше предупреждать

имелось в виду - предупредить, что для этого просто вызывается done()
« Последнее редактирование: Июнь 09, 2010, 17:45 от Гурман » Записан

2^7-1 == 127, задумайтесь...
crossly
Гость
« Ответ #8 : Июнь 09, 2010, 17:46 »

на то и есть
Код:
void QDialogButtonBox::clicked ( QAbstractButton * button )   [signal]
Записан
BRE
Гость
« Ответ #9 : Июнь 09, 2010, 17:47 »

если бы сигнал имел вид QPushButton::clicked(ButtonRole role), а слот QDialog::done(ButtonRole role) все бы замечательно соединялось!
Строит глазки
А какую роль должна передавать кнопка, например, "Установить персональные данные"?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #10 : Июнь 09, 2010, 17:52 »

Цитировать
А какую роль должна передавать кнопка, например, "Установить персональные данные"?

так это же нестандартная кнопка

я про стандартные

но разумеется, если есть некий набор "стандартных" кнопок, то я бы ожидал, что у приемников для них есть набор стандартных реакций, то есть, у QDialog должен быть слот apply() и несколько других, соответствующих набору стандартных кнопок у QDialogButtonBox, а у этого класса соответствующий набор сигналов, которые подключаются автоматом при использовании "стандартных" кнопок

тогда включение использования "стандартной" кнопки в дизайнере просто соединяло бы ее с соответствующим слотом, и никаких вопросов не возникнет
« Последнее редактирование: Июнь 09, 2010, 17:58 от Гурман » Записан

2^7-1 == 127, задумайтесь...
crossly
Гость
« Ответ #11 : Июнь 09, 2010, 18:05 »

возникает.... а что должен делать слот apply() стандартного  диалога ??
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #12 : Июнь 09, 2010, 18:16 »

возникает.... а что должен делать слот apply() стандартного  диалога ??

а что в наследующем его классе программист напишет, то и должен... от стандартных accept и reject в QDialog толку ровно 0 - они просто окно диалога закрывают, их все равно переопределять надо, аналогично и apply(), и остальные

Записан

2^7-1 == 127, задумайтесь...
Kolobok
Гость
« Ответ #13 : Июнь 09, 2010, 18:53 »

Нарисуй слот apply() и сделай так

Код:
QPushButton * btn = buttonBox->button ( QDialogButtonBox::Apply );
connect( btn, SIGNAL( clicked() ), buttonBox, SLOT( apply() ) );

Кнопка Apply в QDialogButtonBox не обязательна. Поэтому, имхо, и слота нет.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #14 : Июнь 09, 2010, 19:16 »

так и сделаю, но кнопка же готовая вроде есть уже... хотя наверно если в дезайнере ее включить, то в .ui файл такой же вызов button() и прописывается...

« Последнее редактирование: Июнь 09, 2010, 19:41 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 23.