QT
日期:2020-07-12
对话框
模态对话框
// A code block
QDialog dlg(this);
dlg.Resize(200,100);
dlg.exec();
模态对话框有阻塞作用;
非模态对话框
// A code block
QDialog *dlg= new QDialog(this);
dlg->Resize(200,100);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg.show();
其中如果窗口设置了Qt::WA_DeleteOnClose 这个属性,在窗口接受了关闭事件后,Qt会释放这个窗口所占用的资源。如果不设置,由于show()不阻塞进程,可能会使相应栈中对象出栈;但如果用new将其定义在堆中,如果不设置setAttribute(Qt::WA_DeleteOnClose)会形成内存泄露。
但用时要注意如果在自定义的QDialog子类构造函数中增加:
setAttribute(Qt::WA_DeleteOnClose);
会在关闭时出现异常,因为当退出main方法时,会自动销毁窗口,而setAttribute方法会使得Qt再次销毁窗口,造成二次delete,产生报错
标准对话框
上述标准对话框中
- QMessageBox要了解其中静态调用的方式、返回值的处理、按钮文字的调整。
QMessageBox box(QMessageBox::Warning, "退出"," 确认退出吗?");
box.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
box.setButtonText(QMessageBox::Ok, QString("确 定"));
box.setButtonText(QMessageBox::Cancel, QString("取 消"));
int button = box.exec();
if (button == QMessageBox::Ok)
...