03-对话框

对话框一般应用于临时交互的场景。学习QT中的对话框时,应该使用QWidget作为基类,而不是QDialog。因为QDialog在显示的时候只会有一个对话框。

一般分为两种:
        1. 模态对话框:阻塞。此时要调用exec进入阻塞状态,而不是show方法,因为在栈上创建的对话框在出了匿名函数后会马上析构掉。

    this->resize(300, 300);
    QPushButton *btn = new QPushButton("open", this);
    btn->move(100, 100);
    connect(btn, &QPushButton::clicked, [=](){
       QDialog dlg;
       dlg.resize(100, 200);
       dlg.exec();
    });

        2. 非模态对话框:非阻塞。调用show方法,但是此时关闭对话框仅仅是隐藏,并不会在对象树上删除,所以会造成内存泄漏。此时要设置属性WA_DeleteOnClose在关闭对话框时就将其析构掉。

    this->resize(300, 300);
    QPushButton *btn = new QPushButton("open", this);
    btn->move(100, 100);
    connect(btn, &QPushButton::clicked, [=](){
        QDialog *dlg = new QDialog(this);
        dlg->setAttribute(Qt::WA_DeleteOnClose);
        dlg->resize(200, 200);
        dlg->show();
    });

 

我们主要学习QT提供的几个标准对话框:提供了静态成员函数
        1. 消息对话框:QMessageBox。一共有四种,注释中有描述,都提供了获取对话框的静态函数,这里就不多作赘述。
                1.1. 参数:父对象、title、text、按钮名称、默认选项。

    this->resize(300, 300);
    QPushButton *btn = new QPushButton("open", this);
    btn->move(100, 100);
    connect(btn, &QPushButton::clicked, [=](){
        QMessageBox::warning(this, "warning", "..."); //警告对话框
        QMessageBox::information(this, "information", "..."); //消息对话框
        QMessageBox::question(this, "question", "...", QMessageBox::Save | QMessageBox::Cancel, QMessageBox::Cancel); //问题对话框
        QMessageBox::critical(this, "error", "..."); //警告对话框
    });

                1.2. 返回值:选择的按钮。 

    connect(btn, &QPushButton::clicked, [=](){
        if (QMessageBox::Save == QMessageBox::question
                (this,
                 "question",
                 "...",
                 QMessageBox::Save | QMessageBox::Cancel,
                 QMessageBox::Cancel)){
            qDebug() << "save";
        } else {
            qDebug() <<"cancel";
        }
    });

        2. 文件对话框:QFileDialog

        参数:父对象、title、path、文件过滤(最好将字符串添加括号)。
        返回值:选择的文件路径。

    connect(btn, &QPushButton::clicked, [=](){
        //qDebug打印QString有双引号,打印char*没有双引号。
        QString path = QFileDialog::getOpenFileName(this, "打开文件", "D:\\Qt\Qt5.9.3\\5.9.3\\", "(*.txt)");
        qDebug() << path.toUtf8().data(); //将QString转换为char *
    });

        3. 颜色对话框:QColorDialog

    connect(btn, &QPushButton::clicked, [=](){
        QColor color =  QColorDialog::getColor();
        qDebug() << color.red();
        qDebug() << color.green();
        qDebug() << color.blue();
    });

        4. 字体对话框: QFontDialog

    connect(btn, &QPushButton::clicked, [=](){
        bool flag;
        QFont ft = QFontDialog::getFont(&flag);
        qDebug() << "字体 " << ft.family();
        qDebug() << "字号 " << ft.pointSize();
        qDebug() << "是否加粗 " << ft.bold();
        qDebug() << "是否倾斜 " << ft.italic();
    });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值