2015-02-10 5 views
0

Я открываю диалог, который представляет пользователь форму с:Держите диалог открытой до тех пор, пока сигнал отбраковки

if(dialog.exec() == QDialog::Accepted) 
    { 
     // do stuff based on returned values 

     if (retval == 1) 
     { 
      value1=dialog.value1(); 

     } 

    if (retval == 2) 
     { 
      // do something else with values from dialog 
     } 
    } 

кнопка формы предлагают несколько вариантов для манипулирования данных пользователя заносит. Пользователь может захотеть сделать несколько данных с данными в форме. Есть ли способ сохранить диалог открытым до тех пор, пока сигнал reject() не будет передан кнопкой отмены диалога?

Я хочу, чтобы диалог оставался открытым до тех пор, пока он не будет явно закрыт с помощью кнопки отмены. Я хочу, чтобы другие кнопки функционировали так, как они сейчас делают, передают значения обратно функции, открывшей диалог, но я хочу, чтобы эти значения передавались без закрытия диалога.

+0

Ваш вопрос не настолько ясен, вы имеете в виду, что exec() выходит, когда вы этого не хотите, например, когда вы нажимаете кнопку «ОК», вы хотите, чтобы он оставался открытым и закрывался только нажатием кнопки «Отмена»? – Marco

+0

Отредактировано, надеюсь, для ясности. – Jocala

+0

Мой первый инстинкт при чтении этого вопроса заключается в том, что это звучит как плохая идея. Конечно, я не знаю, что вы делаете, но я думаю, что, вероятно, лучшее решение вашей проблемы, чем неправильное использование гаджетов пользовательского интерфейса, не предназначено для них. Пользователь ожидает, что диалог исчезнет при нажатии OK. – Misch

ответ

0

Похоже, что вы используете Dialog, когда вам это действительно не нужно. В любом случае, если вам действительно нужно диалоговое поведение, вы можете переопределить некоторые методы на вашем QDialog:

//Prevent window been closed 
void MyDialog::closeEvent(QCloseEvent *event) { 
    event->ignore(); 
} 
void MyDialog::accept() {  
    //default implementation would call: done(QDialog::Accepted) 

    //you can emit some signal 
} 

Имейте в виду, что Exec() не возвратит до тех пор, пока не будет закрыто диалоговое окно, нажав отклонить или вызов делается(). Вы можете передавать дополнительную информацию из диалогового окна, извещающего об этом сигналы.

+0

Итак, если я правильно понимаю, что мне действительно нужно сделать, это открыть новое окно с моей формой и уволить его, когда я закончу? Не использовать диалог? – Jocala

+0

Исправить. Если вы хотите, чтобы ваше окно было модальным, вы можете просто использовать [windowModality] (http://qt-project.org/doc/qt-4.8/qwidget.html#windowModality-prop). – Smasho

Смежные вопросы