qt6:将 QFileDialog::filesSelected 连接到插槽

问题描述

基本上我想在我的 QFileDiag 选择了 1 个或多个文件并被接受(单击“打开”按钮)后触发一些代码,问题是我似乎无法在插槽中实际触发我的代码

这是我的主要小部件中的代码

file_select_diag = new QFileDiag(this)

connect(file_select_diag,&QFileDialog::fileSelected,this,&MainWidget::connect_test);

auto files = file_select_diag->getopenFileName(
        this,tr("test"),QDir::homePath(),tr("text (*.txt)");
void MainWidget::connect_test(QString str)
{
    cout << str.toStdString();
}

这是标题声明

{
    Q_OBJECT

public:
    explicit MainWidget(QWidget *parent = 0); //Constructor
    ~MainWidget();                            // Destructor

private slots:
    void connect_test(QString str);
    void connect_test2(); //like above but cout << "HIT" << end;


private:
    QFileDialog *file_select_diag;

我尝试连接到 connect_testconnect_test2,当我运行我的应用程序并选择文件时,点击打开,没有任何反应。

解决方法

解决方案(从下面 G.M. 的评论中复制)

注意 QFileDialog::getOpenFileName 是一个静态成员 QFileDialog 所以调用 file_select_diag->getOpenFileName(...) 有效地创建了一个独立于 QFileDialog 的实例 file_select_diagand 对此调用 getOpenFileName。

所以这里的两种方法要么完全使用静态方法 getOpenFileName 并且不初始化 file_select_diag 要么完全使用实例方法,配置 file_select_diag 然后使用 file_select_diag->show(),在这种情况下信号将起作用.