【问题标题】:qt6: Connect QFileDialog::filesSelected to a slotqt6:将 QFileDialog::filesSelected 连接到插槽
【发布时间】:2021-09-30 02:47:38
【问题描述】:

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

【问题讨论】:

  • 请注意QFileDialog::getOpenFileNameQFileDialogstatic 成员,因此调用file_select_diag-&gt;getOpenFileName(...) 有效地创建了一个独立于file_select_diagQFileDialog 实例,并针对此调用getOpenFileName
  • 如果问题解决了,请回答您自己的问题,而不是将解决方案放在问题中

标签: qt signals slot qfiledialog qt6


【解决方案1】:

解决方案(复制自 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(),在这种情况下信号将起作用.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多