Qt / 如何从主窗口向对话框发送数据或者获取主窗口中的数据?

3

有两个文件:mainwindow.cppeditorplain.cpp

editorplain.cpp是一个对话框,作为小部件。

问题:将文本数据发送到另一个对话框中的标签。

mainwidnow.cpp

从菜单调用一个新的对话框时触发操作:er将从主窗口返回字符串。

void MainWindow::on_actionRoot_files_triggered()
{
    QString er = ui->selected_filename->text();

    Editorplain editorplainwidget;
    // HERE IS WHAT I WANT SEND A DATA TO ANOTHER DIALOG `editorplain`
    editorplainwidget.exec();
}

打开对话框时,我想从字符串er中获取数据。
Editorplain::setData(myType myData)
{
    ui->label_2->setText(myData.textForEdit);
}

让我们来解释一下我的问题。在 mywindow 上,我有一个字符串 er,它返回一些结果。这个 er 应该被发送到对话框 editorplain,并设置为标签,例如: ui->label->setText(er)。标签是在 QDialog 上创建的 QLabel。

Mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui { class MainWindow; }

class MainWindow : public QMainWindow {
    Q_OBJECT
     public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
     private slots:
    void on_actionOpen_triggered();

    void on_actionExit_triggered();

    void on_actionRoot_files_triggered();

private:
    Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

editorplain.cpp 文件:

#include "editorplain.h"
#include "ui_editorplain.h"
#include "mainwindow.h"

Editorplain::Editorplain(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Editorplain)
{
    ui->setupUi(this);

    // SHOULD PASS ON THIS CONTRUCTOR?

}

Editorplain::~Editorplain()
{
    delete ui;
}

Editorplain::setData(myType myData)
{
    ui->label_2->setText(myData.textForEdit);
}
2个回答

3
如果是自定义的QDialog,只需要将函数setData()设置为公共函数。这样,您可以在显示对话框之前从MainWindow传递您的字符串并调用该函数。您无需通过构造函数传递任何内容。
类似于editorplain.h中的样子。
public:
void setData(const QString &labelText);

以及editorplain.cpp

void Editorplain::setData(const QString &labelText) {
  ui->label_2->setText(labelText);
}

现在在mainwindow.cpp中。
void MainWindow::on_actionRoot_files_triggered()
{
    QString er = ui->selected_filename->text();

    Editorplain editorplainwidget;
    editorplainwidget.setData(er);
    editorplainwidget.exec();
}

真的!这正是我所需要的!但是,有一些小错误已经修复:将 void EditorPlain::setData(const QString &labelText) { 改为 void Editorplain::setData(const QString &labelText) { - Marin Sagovac
:) 已更新答案中的类名。如果解决了您的问题,您可以点赞并接受答案。 - Viv

0
你可以直接将那个字符串传递给 Editorplain 构造函数,如果这不是问题的话。

editorplain.cpp 源文件中传递类似于 Eeditorplain::something() 的字符串? - Marin Sagovac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接