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)。标签是 QLabel 制作的QDialog

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

2 回答 2

3

如果它是一个自定义 QDialog ,只需将函数设为setData()public 。这样,您可以在显示对话框之前从 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();
}
于 2013-03-10T22:13:21.133 回答
0

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

于 2013-03-10T20:04:11.963 回答