Qt5以一种形式从另一种形式访问数据

时间:2018-05-06 11:54:10

标签: c++ qt data-transfer

如何从一种形式访问另一种形式的数据?

我有两种形式: 主要形式:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "manualform.h"
#include "key.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

Key cryptKey;

void MainWindow::on_autoKeyBtn_clicked()
{
    cryptKey.createAuto();
    QString output = cryptKey.toStrg();
    ui->keyField->setText(output);
}

void MainWindow::on_manualKeyBtn_clicked()
{
    ManualForm form;
    form.setModal(true);
    form.exec();
} 

和第二个:

#include "manualform.h"
#include "ui_manualform.h"
#include "key.h"

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

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

Key key;

void ManualForm::on_confirmBtn_clicked()
{
    this->close();    
}

void ManualForm::on_resetBtn_clicked()
{

}

void ManualForm::on_checkBox00_toggled(bool checked)
{
        Coord coord(0,0);
        ui->checkBox09->setDisabled(checked);
        ui->checkBox99->setDisabled(checked);
        ui->checkBox90->setDisabled(checked);
        key.add(coord);
}

假设Key对象将在ManualForm中创建并转移到MainWindow或ManualForm将访问MainWindow的cryptKey。但这是一个我无法解决的问题。

1 个答案:

答案 0 :(得分:1)

您可以在堆上创建cryptKey并使用signals and slots将其传递给新表单。此外,如果其他表单删除了对象,您可以使用QPointer进行保护。

您必须在MainWindow中定义一个信号,在ManualForm中定义一个插槽,并将cryptKey优先定义为ManualForm中的类对象。然后使用emit将对象发送到ManualForm。您可能还必须使用qRegisterMetaType来注册对象。