2010-09-16 3 views
1

Не уверен, что это имеет прямое решение, но я хочу написать функцию, которая показывает диалог (определенный в другом месте класса, который наследует QDialog) и возвращает пользовательский ввод, когда пользователь завершил взаимодействие с диалогом. Другими словами, что-то похожее на статический метод QFileDialog::getOpenFileName, где одна строка может открыть диалог и вернуть вход пользователя вместо использования громоздкого (в данном случае) механизма сигнала/слота.Qt4: Напишите функцию, которая создает диалог и возвращает выбор пользователя

Планируемое применение:

/* Shows the dialog, waits until user presses OK or Cancel, 
    then returns the user's choice. 
*/ 

result = createDialogAndReturnUserChoice() 

Сейчас я работаю в PyQt, но я в порядке с ответами в традиционных рамках Qt4 C++.

EDIT //

Вот как это сделать:

dialog = CustomDialog() # creates the custom dialog we have defined in a class inheriting QDialog 
if dialog.exec_(): # on exec_(), the whole program freezes until the user is done with the dialog; it returns the response of the user 
    # success 
else: 
    # failure 
+0

[QInputDialog] (http://doc.trolltech.com/4.3/qinputdialog.html)? – sje397

+0

Я хочу использовать пользовательский диалог. – metaliving

ответ

1

Похоже, у вас есть все на месте, что вам нужно. Вы можете сделать статическую функцию в своем производном классе QDialog, который делает то, что вы хотите. Вы можете создать структуру или класс, который инкапсулирует данные, которые пользователь будет генерировать, и вернуть их из вашей статической функции. Qt включает весь исходный код, поэтому вы можете посмотреть QFileDialog::getOpenFileName() в qfiledialog.cpp и посмотреть, что они делают.

Редактировать: Извините, я пропустил, что вы работаете в Python. Я не знаю, какие средства предоставляет язык для расширения класса C++ и статических методов.

+0

Спасибо. Я посмотрел исходный код, а затем узнал о функции exec(), которая делает именно то, что я хочу. – metaliving