Qt基础对话框QDialog

模态显示对话框

调用exec方法可以使得对话框模态显示,但是一个阻塞函数

[virtual slot] int QDialog::exec()

对话框的三个槽函数

  • accept
  • [virtual slot] void QDialog::accept();
  • reject
  • [virtual slot] void QDialog::reject()
  • done
  • [virtual slot] void QDialog::done(int r)

对话框内部调用上面三个槽函数都会使得对话框消失并使exec()阻塞函数返回,并设置exec()函数的返回值

  • accept:将exec()返回值置为QDialog::Accepted(就是1),同时会发射accept的信号
  • reject:将exec()返回值置为QDialog::Rejected(就是0),同时会发射reject的信号
  • done:将exec()返回值置为done方法的参数r,比如调用done(100),那么exec函数的返回值就是100,同时会发射finished(r)的信号

获取返回值

int QDialog::result() const

对话框退出时的返回值除了可以通过exec()函数获取,还可以通过result方法获取

举例

对话框添加3个按钮,点击后分别调用3个槽函数,在main函数中打印对话框的返回值

 点击accpt:

点击reject:

点击done:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QPushButton>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr)    : QDialog(parent)
    {
        resize(400,300);
        QPushButton* btn_accept=new QPushButton("accept",this);
        btn_accept->setGeometry(0,0,100,50);

        QPushButton* btn_reject=new QPushButton("reject",this);
        btn_reject->setGeometry(0,80,100,50);

        QPushButton* btn_done=new QPushButton("done",this);
        btn_done->setGeometry(0,180,100,50);

        connect(btn_accept,&QPushButton::clicked,this,&QDialog::accept);
        connect(btn_reject,&QPushButton::clicked,this,&QDialog::reject);
        connect(btn_done,&QPushButton::clicked,this,[=](){this->done(1000);});

    }
    ~Dialog()=default;
};
#endif // DIALOG_H
#include "dialog.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Dialog d;
    auto ret=d.exec();
    if(ret==QDialog::Rejected)
    {
        qDebug()<<"reject";
    }
    else if(ret==QDialog::Accepted)
    {
        qDebug()<<"accept";
    }
    else
    {
        qDebug()<<"done";
    }

    qDebug()<<"返回值:"<<d.result();

    return a.exec();
}

学习链接:https://github.com/0voice

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值