Qt /从主窗口发送数据到对话框或从主窗口抓取数据

Qt / Send data from mainwindow to dialog or grab a data from mainwindow?

本文关键字:数据 窗口 抓取 对话框 Qt      更新时间:2023-10-16

有两个文件:mainwindow.cppeditorplain.cpp

editorplain.cpp是dialog as widget。

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

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 file:

#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);
}

如果是自定义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();
}

如果没有问题,您可以将该字符串传递给Editorplain构造函数