以下代码中,重点在有//!!!的行。
建立文件dialog01.h,内容如下:
#ifndef DIALOG01_H
#define DIALOG01_H
#include <QDialog>
#include <QString>
#include <QPushButton>
#include <QLineEdit>
class Dialog01 : public QDialog
{
Q_OBJECT
public:
Dialog01(QWidget *parent);
QString getText();
public slots:
void buttonClicked();
private:
QPushButton *button;
QLineEdit *lineEdit;
QString myText;
};
#endif // DIALOG01_H
建立文件dialog01.cpp,内容如下:
#include "dialog01.h"
#include <QWidget>
#include <QHBoxLayout>
#include <QMessageBox>
Dialog01::Dialog01(QWidget *parent)
:QDialog(parent)
{
lineEdit = new QLineEdit;
button = new QPushButton("OK");
myText = "";
QHBoxLayout *hbox = new QHBoxLayout;
hbox->addWidget(lineEdit);
hbox->addWidget(button);
this->setLayout(hbox);
this->setWindowTitle("输入内容");
connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button, SIGNAL(clicked()), this, SLOT(accept())); //!!!
}
void Dialog01::buttonClicked()
{
QString text = this->lineEdit->text();
if (text.isEmpty()) {
QMessageBox::information(this, tr("警告"),
tr("请输入内容."));
return;
}
else {
this->myText = text;
this->lineEdit->clear();
this->hide(); //!!!
}
}
QString Dialog01::getText()
{
return this->myText;
}
建立文件window01.h,内容如下:
#ifndef WINDOW01_H
#define WINDOW01_H
#include <dialog01.h>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
class Window01 : public QWidget
{
Q_OBJECT
public:
Window01();
public slots:
void buttonClick();
private:
QLabel * showTextLabel;
QLineEdit * showTextLine;
QPushButton * myButton;
QHBoxLayout *hbox;
Dialog01 *dialog01;
};
#endif // WINDOW01_H
建立文件window01.cpp,内容如下:
#include "window01.h"
#include <QDebug>
Window01::Window01()
:QWidget()
{
this->showTextLabel = new QLabel("您输入的是:");
this->showTextLine = new QLineEdit();
this->myButton = new QPushButton("打开");
this->hbox = new QHBoxLayout;
this->dialog01 = new Dialog01(this);
this->hbox->addWidget(showTextLabel);
this->hbox->addWidget(showTextLine);
this->hbox->addWidget(myButton);
this->connect(this->myButton, SIGNAL(clicked()), this, SLOT(buttonClick()));
this->setLayout(hbox);
}
void Window01::buttonClick()
{
this->dialog01->show(); //!!!
if (this->dialog01->exec() == QDialog::Accepted) { //!!!
qDebug() << this->dialog01->getText();
this->showTextLine->setText(this->dialog01->getText());
this->showTextLine->setReadOnly(true);
}
}
修改main.cpp:
#include "mainwindow.h"
#include <QApplication>
#include <window01.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Window01 w;
w.show();
return a.exec();
}
运行结果: