Qt学习(003-2)对话框

在Qt5.1.1下使用creator建立GUI项目mydialog。
以下代码中,重点在有//!!!的行。

建立文件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();
}

运行结果:

转载于:https://my.oschina.net/letiantian/blog/179703

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值