将输入从 qdialog 传输到主窗口

Posted

技术标签:

【中文标题】将输入从 qdialog 传输到主窗口【英文标题】:Transfer inputs from qdialog to mainwindow 【发布时间】:2012-08-29 11:18:31 【问题描述】:

在 qdialog 中,我在主窗口中输入了一些我需要的输入,我怎样才能得到它们?我的程序是这样的,我有一个 qdialog 必须在 mainwindow 之前打开,我在那里输入一些输入并单击 ok,然后使用这些输入打开 mainwinodw。

这是 dialog.cpp 代码:

#include "dialog.h"
#include "ui_dialog.h"

#include "vtkBMPReader.h"

// Define the length of the volume
void Dialog::bmprange()

// Getting some proprieties for the lenght of the volume
QString XMAX=ui->lineEdit->text();
double xMax=XMAX.toDouble();
QString YMAX=ui->lineEdit_2->text();
double yMax=YMAX.toDouble();
QString ZMAX=ui->lineEdit_3->text();
double zMax=ZMAX.toDouble();
QString XMMAX=ui->lineEdit_4->text();
double xMMax=XMMAX.toDouble();
QString YMMAX=ui->lineEdit_5->text();
double yMMax=YMMAX.toDouble();
QString ZMMAX=ui->lineEdit_6->text();
double zMMax=ZMMAX.toDouble();

if (xMax==0 || yMax==0 || zMax==0 || xMMax==0 || yMMax==0 || zMMax==0)

    ui->label_17->setText("Error: invalid measures");

else

// Using vtkBMPReader to read all the 128 bmp slices
  vtkBMPReader *bmp= vtkBMPReader::New();
    bmp->SetDataByteOrderToLittleEndian();
    bmp->SetFilePrefix ("/home/matt/Desktop/ouBMP/exemplo");
    bmp->SetFilePattern("%s%d.bmp");
    bmp->SetFileNameSliceSpacing(1);
    bmp->SetNumberOfScalarComponents(3);
    bmp->SetDataOrigin(0,0,0);
    bmp->SetDataSpacing(xMMax/(xMax-1.0),xMMax/(yMax-1.0),xMMax/(zMax-1.0));
    bmp->SetDataExtent(0,xMax-1.0,0,yMax-1.0,1,zMax);
    bmp->Update();
    ui->label_17->setText("Valid measures");



Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)

    ui->setupUi(this);

  // Control volume measures
    // Making the lineedit objects only accept numbers
    ui->lineEdit->setValidator(new QIntValidator(this));
    ui->lineEdit_2->setValidator(new QIntValidator(this));
    ui->lineEdit_3->setValidator(new QIntValidator(this));
    ui->lineEdit_4->setValidator(new QDoubleValidator(this));
    ui->lineEdit_5->setValidator(new QDoubleValidator(this));
    ui->lineEdit_6->setValidator(new QDoubleValidator(this));
    connect(ui->lineEdit, SIGNAL(textChanged(QString)), this, SLOT(bmprange()));
    connect(ui->lineEdit_2, SIGNAL(textChanged(QString)), this, SLOT(bmprange()));
    connect(ui->lineEdit_3, SIGNAL(textChanged(QString)), this, SLOT(bmprange()));
    connect(ui->lineEdit_4, SIGNAL(textChanged(QString)), this, SLOT(bmprange()));
    connect(ui->lineEdit_5, SIGNAL(textChanged(QString)), this, SLOT(bmprange()));
    connect(ui->lineEdit_6, SIGNAL(textChanged(QString)), this, SLOT(bmprange()));


Dialog::~Dialog()

    delete ui;


void Dialog::changeEvent(QEvent *e)

    QDialog::changeEvent(e);
    switch (e->type()) 
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    

我怎样才能在主窗口中使用 bmp、xMax、...

【问题讨论】:

【参考方案1】:

我不会说 C++,所以很抱歉缺少细节。这是我要做的:

当您关闭对话框时,捕获您应该拥有的closeEvent。如果您的对话框有一个OK 按钮,您可以使用它的clicked 信号。 将其连接到特定插槽,其功能是 (1) 检索单个对象中所有对话框的 QLineEdit 的文本(例如 QStringList)和 (2) 实际关闭对话框。 将此QStringList 的内容存储为主窗口的属性,或作为可从主窗口检索的独立对象。

【讨论】:

问题是对话框和主窗口在不同的文件中 你只是在plainvolume.cpp中包含“dialog.h”吗? 你不能定义某种通用模块来存储你的信号吗? 我创建了一个函数作为槽,槽是这样的void Dialog::getvalues() double list[6]; list[0]=xMax; list[1]=yMax; list[2]=zMax; list[3]=xMMax; list[4]=yMMax; list[5]=zMMax; 并添加 dialog.h 作为包含在 planevolume.cpp 中,然后我将其称为 Dialog::getvalues();但我知道我不能调用没有对象的函数。

以上是关于将输入从 qdialog 传输到主窗口的主要内容,如果未能解决你的问题,请参考以下文章

QT Qdialog

如何将修改后的图像从工具窗口传递到主窗口?

如何从另一个 qdialog 的主窗口访问 ui?

隐藏 qdialog 并显示主窗口

将小部件从单独的 ui 文件加载到主窗口

Qt编程求助:有没有啥类似QDialog::exec()之类的能阻塞程序的方法?