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

时间:2013-03-10 19:57:51

标签: c++ qt

有两个文件:  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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果这不是问题,您可以将该字符串传递给Editorplain构造函数。