QT窗口(5)-对话框
QT窗口(5)-对话框
基本概念
用户与用户间实现短平快的操作
Qt中使用QDialog类表示对话框
和QWidget区别不大
实际开发中,更多在代码中创建额外的类,让额外的类继承来自QDialog
主窗口一般不会作为对话框,主窗口可以生成其他对话框
代码如下:
void Dialog::on_pushButton_clicked()
{QDialog*dialog=new QDialog(this);dialog->show();
}
运行结果:
可以在此基础上拓展功能
代码如下:
void Dialog::on_pushButton_clicked()
{QDialog*dialog=new QDialog(this);dialog->setWindowTitle("对话框的标题");dialog->resize(400,300);dialog->show();
}
运行结果:
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();
}
运行结果如下:
可以添加控件
代码如下:
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();
}
运行结果:
通过图形化界面自定义对话框
关键点在于:创建一个新的ui文件
代码如下:
void MainWindow::on_pushButton_clicked()
{QDialog*dialog=new QDialog(this);dialog->setAttribute(Qt::WA_DeleteOnClose);dialog->show();
}