0

本质上,我想在我的 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_test,并且connect_test2当我运行我的应用程序并选择文件时,点击打开,没有任何反应。

4

1 回答 1

0

解决方案(从下面的通用汽车评论中复制)

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

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

于 2021-07-23T13:28:11.770 回答