Qt中的对话框

  对话框是GUI程序和用户进行简短交互的顶层窗口,所谓顶层窗口即始终在主窗口之上显示。QDialog是Qt所有类型的对话框窗口的基类,它继承于QWidget,是一种容器类型组件。

这里写图片描述

  QWidget是所有窗口类的抽象,它也可以生成对话框,但是对话框是常见的窗口组件,若每次要使用对话框,都利用QWidget来生成并设置相关参数,显然十分繁琐。所以Qt为我们封装了另外一个子类QDialog,专门用于生成对话框。

1. 模态和非模态对话框

  对话框归为两大类,即模态对话框于非模态对话框。
  模态对话框(QDialog::exec())
  阻塞型的对话框,显示后无法与父窗口进行交互。如word文档中修改源文件内容后直接关闭窗口弹出的对话框:
这里写图片描述
  非模态对话框(QDialog::show())
  非阻塞型的对话框,显示后还可以与父窗口进行交互。如word文档的替换操作:
这里写图片描述

  模态对话框:
  (1) 定义一个主窗口,窗口内有一个按钮:

//Widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QtGui/QApplication>
#include <QWidget>
#include <QPushButton>
#include <QDebug>

class Widget : public QWidget
{
    Q_OBJECT            //表要类要使用信号与槽机制
protected:
    QPushButton Btn;    //按钮
protected slots:
    void Btn_Clicked(); //槽,用于响应按钮按下操作
public:
    Widget(QWidget *parent = 0); //parent默认参数为0,表默认是容器类父窗口
    ~Widget();
};

#endif // WIDGET_H

//Widget.cpp
#include "Widget.h"
#include "Dialog.h"

//Widget的构造函数,Btn初始化为其Widget的功能类字子组件
Widget::Widget(QWidget *parent) : QWidget(parent), Btn(this)
{
    Btn.resize(80, 30);
    Btn.move(40, 40);
    Btn.setText("btn");

    resize(240, 100);
    setWindowTitle("hello");
    connect(&Btn, SIGNAL(clicked()), this, SLOT(Btn_Clicked()));
}

Widget::~Widget()
{
}

//Widget内按钮的响应槽,该按钮按下后Winget会弹出对话框(Dialog)
void Widget::Btn_Clicked()
{
    qDebug() << "Btn_Clicked()";
    Dialog d(this);     //Dialog是对话框类,见下
    int ret = d.exec(); //exec()表明d是个模态对话框,用户不操作该对话框,会阻塞于此。
                        //exec()返回对话框的运行结果
    if (ret == Dialog::Accepted)
    {
        qDebug() << "Accepted";
    }
    else if (ret == Dialog::Rejected)
    {
        qDebug() << "Rejected";
    }
}

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值