我的目标是:用户可以选择文件(仅限 *mp3),然后单击两次它应该播放(所以文件的 QString 应该发送到 play() 函数) 首先我开始使用 QTreeView,但它有信号文件被选中。
所以我决定创建 QFileDialog 并将其用作 MainWindow 中内置的小部件。我唯一的问题是双击后它消失了。有可能避免吗?
我应该使用一些 QDialog::finished() 信号还是 QDialog::done()?
我的目标是:用户可以选择文件(仅限 *mp3),然后单击两次它应该播放(所以文件的 QString 应该发送到 play() 函数) 首先我开始使用 QTreeView,但它有信号文件被选中。
所以我决定创建 QFileDialog 并将其用作 MainWindow 中内置的小部件。我唯一的问题是双击后它消失了。有可能避免吗?
我应该使用一些 QDialog::finished() 信号还是 QDialog::done()?
首先,可以从QTreeView中得到一个双击信号;它的:
void doubleClicked( const QModelIndex & index );
其次,如果您真的想以这种方式使用 QFileDialog,请首先覆盖 closeEvent(QCloseEvent * event)。在里面,如果你想关闭对话框,执行 event->accept();,否则执行 event->ignore();。连接到 QFileDialog::currentChanged( const QString & path ); 获取用户双击的文件名。最后一件事——确保在堆上创建 QFileDialog(使用 new),而不是在堆栈上(本地),并在其上调用 show() 而不是 exec()。
请记住,您可以将其与父级(this)一起提供,以后无需将其删除。
connect(file_dialog, SIGNAL(finished(int)), file_dialog, SLOT(open()));
这似乎工作正常。几何形状保持固定,它会记住最后一条路径。