Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Fat-Zer от Апрель 25, 2012, 09:02



Название: [SOLVED] QDialog. Добавление своих действий перед exec()
Отправлено: Fat-Zer от Апрель 25, 2012, 09:02
хочу выполнить свои действия при exec().
переопределение exec() работает, но это не очень хорошая идея, ибо он не виртуальный...

есть другие идеи?


Название: Re: QDialog. Добавление своих действий перед exec()
Отправлено: Syveren от Апрель 25, 2012, 09:14
Какого формата действия?
Можно добавить метод
int myExec(....)
{ ..... ;
  return this->exec();
}   


Название: Re: QDialog. Добавление своих действий перед exec()
Отправлено: twp от Апрель 25, 2012, 09:30
Есть виртуальные слоты
Код
C++ (Qt)
void QDialog::accept ()
void QDialog::done (int r)
void QDialog::reject()
 
Все зависит от того, что в итоге нужно получить.


Название: Re: QDialog. Добавление своих действий перед exec()
Отправлено: GreatSnake от Апрель 25, 2012, 10:15
есть другие идеи?
Перегрузи setVisible().


Название: Re: QDialog. Добавление своих действий перед exec()
Отправлено: Fat-Zer от Апрель 25, 2012, 10:21
Какого формата действия?
в данном случае - запуск другого диалога
Код
C++ (Qt)
int MYDialog::exec() {
   QFileDialog fd(this);
 
   if(!fd.exec()) {
       return QDialog::Rejected;
   }
 
   ui->leFile->setText(fd.selectedFiles().at(0));
   return QDialog::exec();
}
Можно добавить метод
int myExec(....)
те же яйца, что и переопределение exec(), только в профиль...

Есть виртуальные слоты

Все зависит от того, что в итоге нужно получить.
не в тему это...
Перегрузи setVisible().
пожалуй лучший вариант...
[added]
на этом и порешил, спасибо.
Код
C++ (Qt)
void MYDialog::setVisible(bool visible) {
   if(visible) {
       QFileDialog fd(this);
 
       if(!fd.exec()) {
           this->reject();
           return;
       }
 
       ui->leFile->setText(fd.selectedFiles().at(0));
   }
 
   QDialog::setVisible(visible);
}