如何从对话框返回QStringList

时间:2011-12-05 11:22:07

标签: c++ qt

我有一些Dialog类,通过它我可以选择文件和/或目录。在这个对话框中有一个名为okBtn_clicked的fnc,在这个fnc中我得到QModelIndexes并通过它们我能够创建选择文件的QStringList。但是关闭此对话框后如何返回它们? 编辑:

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

enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

除非已经调用析构函数,否则在关闭对话框后仍然可以访问该对话框。因此,最简单的方法是添加一个返回所需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
}

你的ok按钮插槽不应返回任何内容,因为这是由Qt在内部处理的。

答案 1 :(得分:1)

执行与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(); // <--
}