Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Vlad от Ноябрь 02, 2009, 14:55



Название: QDialog и его buttonbox
Отправлено: Vlad от Ноябрь 02, 2009, 14:55
 Есть QDialog, на нем его стандартные кнопки Cancel OK. При нажатии ОК нужно сначала совершить некие действия, и после их правильного выполнения делать стандартную обработку ОК. Я делаю так - перевесил сигнал accepted() на свой слот. Как мне теперь добраться до слота accept() кнопки ОК? Если делать так - нажимается ОК, я делаю свои дела и потом вешаю сигнал accepted() на слот accept(), то нажимать кнопку надо 2 раза, что неприемлимо. Либо пробую напрямую вызвать accept(), но он protected. Может можно по другому еще как-то?


Название: Re: QDialog и его buttonbox
Отправлено: BRE от Ноябрь 02, 2009, 14:59
Слот accept() виртуальный, в своем диалоги можно его перекрыть и выполнять необходимые действия и в конце звать QDialog::accept().

Код:
class MyDialog : public QDialog
{
protected slots:
virtual void accept()
{
// свои действия

QDialog::accept();
}
};


Название: Re: QDialog и его buttonbox
Отправлено: Vlad от Ноябрь 03, 2009, 01:19
Спс за подсказку, только приходится в конце писать QDialog::close(); вместо QDialog::accept(); - иначе слот сам себя вызывать начинает  :o


Название: Re: QDialog и его buttonbox
Отправлено: spectre71 от Ноябрь 03, 2009, 08:55
... только приходится в конце писать QDialog::close(); вместо QDialog::accept(); - иначе слот сам себя вызывать начинает  :o

С какой стати? Ерунда!


Название: Re: QDialog и его buttonbox
Отправлено: Vlad от Ноябрь 03, 2009, 16:37
Хз, по крайней мере у меня действие напоминающее это было.