QT窗口(5)-对话框

QT窗口(5)-对话框

基本概念

用户与用户间实现短平快的操作

Qt中使用QDialog类表示对话框

和QWidget区别不大

实际开发中,更多在代码中创建额外的类,让额外的类继承来自QDialog

主窗口一般不会作为对话框,主窗口可以生成其他对话框

代码如下:

void Dialog::on_pushButton_clicked()
{
    QDialog*dialog=new QDialog(this);
    dialog->show();
}

运行结果:
QT窗口(5)-对话框_第1张图片

可以在此基础上拓展功能

代码如下:

void Dialog::on_pushButton_clicked()
{
    QDialog*dialog=new QDialog(this);
    dialog->setWindowTitle("对话框的标题");
    dialog->resize(400,300);
    dialog->show();
}

运行结果:

QT窗口(5)-对话框_第2张图片

QDialog类也是QWidget的子类

对话框内存释放问题

注意点:不同于界面上的其他控件,此处QDialog每次按下按钮,都会创建一个新的对象,并进行显示,这样会导致内存泄漏

如何解决这样的问题?

如果加上delte,对话框就会一闪而过

代码如下:

void Dialog::on_pushButton_clicked()
{
    QDialog*dialog=new QDialog(this);
    dialog->setWindowTitle("对话框的标题");
    dialog->resize(400,300);
    dialog->show();
    //正确做法是把delete和关闭按钮结合在一起,在用户点击关闭时候,触发delete
    //在Qt中为了方便,可以通过设置属性
    dialog->setAttribute(Qt::WA_DeleteOnClose);
}

自定义对话框

通过纯代码的方式

想要自定义对话框,需要继承来自QDialog的类

代码如下:

void MainWindow::on_pushButton_clicked()
{
    Dialog*dialog=new Dialog(this);
    dialog->resize(400,300);
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    dialog->show();
}

运行结果如下:

QT窗口(5)-对话框_第3张图片

可以添加控件

代码如下:

Dialog::Dialog(QWidget*parent):QDialog(parent)
{
    QVBoxLayout*layout=new QVBoxLayout();
    this->setLayout(layout);
    //可以添加一些控件
    QLabel*label=new QLabel("这是一个对话框",this);
    QPushButton*button=new QPushButton("关闭",this);

    layout->addWidget(label);
    layout->addWidget(button);

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

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

运行结果:

QT窗口(5)-对话框_第4张图片

通过图形化界面自定义对话框

关键点在于:创建一个新的ui文件

代码如下:

void MainWindow::on_pushButton_clicked()
{
    QDialog*dialog=new QDialog(this);
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    dialog->show();
}

你可能感兴趣的:(qt,java,数据库,系统架构,c++,开发语言,redis)