我有一些Dialog类,通过它我可以选择文件和/或目录。在这个对话框中有一个名为okBtn_clicked的fnc,在这个fnc中我得到QModelIndexes并通过它们我能够创建选择文件的QStringList。但是关闭此对话框后如何返回它们? 编辑:
QModelIndexList Dir_File_Select::okBtn_clicked_()
{
accept();
return view->selectionModel()->selectedIndexes();
}
答案 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(); // <--
}