如何从另一个 QDialog 访问组合框的文本并将其写入该对话框中的 lineEdit

Posted

技术标签:

【中文标题】如何从另一个 QDialog 访问组合框的文本并将其写入该对话框中的 lineEdit【英文标题】:How to access text of comboBox from another QDialog and write it to lineEdit in that Dialog 【发布时间】:2019-06-12 08:09:48 【问题描述】:

我需要从对话框访问主窗口中组合框的文本。之后,我想将该文本写入 Dialog 中的 lineEdit。我该怎么做?

我尝试使用信号/插槽来处理这个问题。但是,我无法修复。我是新手,需要帮助。

projects.h

signals:
    void get_name_pro(const QString &);
    void get_name_soft(const QString &);

private slots:
    void on_comboBox_projects_currentIndexChanged(const QString &arg1);
    void on_pushButton_addChange_clicked();
    void on_comboBox_software_activated(int index);
    void on_comboBox_software_currentIndexChanged(const QString &arg1);
    void popUp_Change_Note();
    void popUp_Report();

projects.cpp

void Projects::on_pushButton_addChange_clicked()

    Add_Change addChange;
    addChange.setModal(true);
    addChange.exec();

    QString data_pro = ui->comboBox_projects->currentText();
    QString data_soft = ui->comboBox_software->currentText();
    //QString data_soft = ui->tableView_projectDetails->model()->data(ui->tableView_projectDetails->model()->index(0,0)).toString();

    Add_Change *add_change;
    add_change = new Add_Change(this);
    connect (this, SIGNAL( get_name_pro( const QString & ) ), add_change, SLOT( set_text_pro( const QString & ) ) );
    connect (this, SIGNAL( get_name_soft( const QString & ) ), add_change, SLOT( set_text_soft( const QString & ) ) );
    //connect(this, &Projects::get_name_pro, add_change, &Add_Change::set_text_pro);
    //connect(this, &Projects::get_name_soft, add_change, &Add_Change::set_text_soft);

    emit get_name_pro(data_pro);
    emit get_name_soft(data_soft);
    qDebug() << "Project sent:" << data_pro;
    qDebug() << "Software sent:" << data_soft;

add_change.h

public slots:
    void set_text_pro(const QString & text_pro);
    void set_text_soft(const QString & text_soft);

private slots:
    void on_toolButton_uploadReport_clicked();
    void on_pushButton_save_clicked();
    void on_pushButton_clean_clicked();

add_change.cpp

void Add_Change::set_text_pro(const QString & text_pro)

    qDebug() << "Project received:" << text_pro;
    ui->lineEdit_proChanged->setText(text_pro);

void Add_Change::set_text_soft(const QString & text_soft)

    qDebug() << "Software received:" << text_soft;
    ui->lineEdit_softChanged->setText(text_soft);

我在单击 addChange pushButton 后看到这条 qDebug 消息:

Project received: "Monitoring"
Software received: "Broadcast"
Project sent: "Monitoring"
Software sent: "Broadcast"

但是,lineEdit_proChangedlineEdit_softChanged 仍然是空的。

我需要帮助来解决这个问题。提前谢谢你。

【问题讨论】:

【参考方案1】:

那是因为您显示了一个 QDialog (Add_Change addChange;) 而将信号和插槽连接到另一个 (Add_Change *add_change;)

【讨论】:

我按照你说的做了改变。这还不够。我意识到我必须在信号/插槽代码之后执行模态。我也做了那个更正,现在它工作得很清楚。非常感谢。

以上是关于如何从另一个 QDialog 访问组合框的文本并将其写入该对话框中的 lineEdit的主要内容,如果未能解决你的问题,请参考以下文章

如果带有文本框的单元格的函数值

如何检索组合框的选定值(不是文本)

如何使用 setfilter 和基于组合框的访问报告?

如何根据从其他框中选择的文本更改动态创建的组合框的显示项

从组合框的值中获取选项的文本[重复]

两个多行文本框的乘积并将其显示到另一个多行文本框