Как вернуть QStringList из диалога - PullRequest
3 голосов
/ 05 декабря 2011

У меня есть некоторый класс Dialog, с помощью которого я выбираю файлы и / или каталоги.В этом диалоге есть fnc с именем okBtn_clicked, и в этом fnc я получаю QModelIndexes, и через них я могу создать QStringList выбранных файлов.Но как их вернуть после закрытия этого диалога?
РЕДАКТИРОВАТЬ:

QModelIndexList Dir_File_Select::okBtn_clicked_()
{
    accept();
    return view->selectionModel()->selectedIndexes();
}  

enter image description here enter image description here

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

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

QStringList getList()
{
    QStringList list;
    // populate it
    return list;
}

В вашем главном приложении вы должны просто соединить сигнал accepted диалога со слотом, который обрабатывает его и получает список строк.

connect(dialog, SINGAL(accepted()), this, SLOT(dialogAccepted()));

void dialogAccepted()
{
   QStringList list = dialog->getList();
   // do whatever you want with it
}

Другой вариант - создать в диалоговом окне сигнал с аргументом QStringList и выдать его перед accept

.
void onOKButtonClicked()
{
    QStringList list = createList(); // Construct a QStringList
    emit myStringListSignal(list);
    accept();
}

Опять же, вы должны подключить этот сигнал к слоту, который обрабатывает QStringList

connect(dialog, SIGNAL(myStringListSignal(QStringList)), this, SLOT(handleDialogStringList(QStringList)));

void handleDialogStringList(QStringList list)
{
   // do whatever you want with the list
}

Ваш слот кнопки ОК не должен возвращать ничего, поскольку это обрабатывается внутренне Qt.

1 голос
/ 05 декабря 2011

Сделайте что-то похожее на QFileDialog.

// Pseudocode

class Dir_File_Select {
private:
    QStringList filenames;

[...]

void Dir_File_Select::okBtn_clicked_()
{
    accept();

    //return view->selectionModel()->selectedIndexes();
    update filenames
}

QStringList Dir_File_Select::getFiles()
{
    return filenames;
}

и в каком-то другом классе

void Class::foo() {
    Dir_File_Selec dlg;

    dlg.show();
    dlg.getFiles(); // <--
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...