9_24_对话框(dialog)

非模态对话框

• ⾮模态对话框显⽰后独⽴存在,可以同时与⽗窗⼝进⾏交互,是⼀种⾮阻塞式对话框,使⽤QDialog::show()函数调⽤。

对话框

QDialog 其实也是QWidget的子类,QWidget的各种属性方法,QDialog也能使用。
• 不同于界面上的其他控件,此处QDialog每次按下按钮,都会创建一个新的QDialog对象,并进行显示,每次点击都会创建新的对话框对象。这时就会 造成内存泄漏!

按钮的槽函数生成对话框代码

void MainWindow::on_pushButton_clicked()
{
    //创建一个对话框
    QDialog* dialog = new QDialog();
    //设置对话框的尺寸和标题
    dialog->resize(400,300);
    dialog->setWindowTitle("这是一个对话框");

    //通过show方法显示出对话框
    dialog->show();
}

内存泄漏解决方法:

	用对话框的关闭按钮来触发delete方法,使用delete方法来释放dialog。
void MainWindow::on_pushButton_clicked()
{
    //创建一个对话框
    QDialog* dialog = new QDialog();
    //设置对话框的尺寸和标题
    dialog->resize(400,300);
    dialog->setWindowTitle("这是一个对话框");

    //通过show方法显示出对话框
    dialog->show();
    
    //Qt中给出的方法,可以通过设置属性,完成对话框关闭按钮和对话框释放功能的关联。
    dialog->setAttribute(Qt::WA_DeleteOnClose);
}

自定义对话框

代码创建自定义对话框

代码创建自定义对话框的时候,我们需要通过新建的类 dialog来继承QDialog,然后使用新建的类dialog的构造函数来创建自定义对话框。

//dialog.cpp
#include<QPushButton>
#include<QLabel>
#include<QVBoxLayout>

Dialog::Dialog(QWidget* parent):QDialog(parent)
{
    //新建两个控件
    QPushButton* button = new QPushButton("关闭", this);
    QLabel* label = new QLabel("这是一个对话框", this);
    
    //新建一个布局
    QVBoxLayout* boxlayout = new QVBoxLayout(this);
    
    //将控件添加到布局当中去
    boxlayout->addWidget(label);
    boxlayout->addWidget(button);

    
    connect(button, &QPushButton::clicked, this, &Dialog::control);
}

void Dialog::control()
{
    this->close();
}

图形化创建自定义对话框

图形化的方式就需要新建一个ui,我们自定义新建的ui即可,然后将新建的ui变成我们自定义的对话框

• 当我们新建一个UI的同时,会生成一个类,我们可以选择这个类继承自QDialog ,
• 然后我们再自定义的对这个类进行修改,添加一些控件之类的
• 最后再用这个类直接创建对话框,生成的就是我们自定义的对话框。

模态对话框

• 模态:弹出对话框的时候,无法操作父窗口,必须要完成对话框内部的操作,关闭对话框之后,才能操作对话框。
• 非模态:弹出对话框的时候也同样能操作父窗口。

如何产生模态对话框?

	将 show方法换成  exec 方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值