网站不备案可以做淘宝客吗,用.aspx做网站,网站制作现在赚钱么,哪个公司的软件系统开发文章目录 1 :peach:对话框介绍:peach:2 :peach:对话框的分类:peach:2.1 :apple:模态对话框:apple:2.2 :apple:非模态对话框:apple:2.3 :apple:混合属性对话框:apple: 3 :peach:Qt 内置对话框:peach:3.1 :apple:消息对话框 QMessageBox:apple: 1 #x1f351;对话框介绍#x… 文章目录 1 :peach:对话框介绍:peach:2 :peach:对话框的分类:peach:2.1 :apple:模态对话框:apple:2.2 :apple:非模态对话框:apple:2.3 :apple:混合属性对话框:apple: 3 :peach:Qt 内置对话框:peach:3.1 :apple:消息对话框 QMessageBox:apple: 1 对话框介绍
对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框中。对话框通常是⼀个顶层窗⼝出现在程序最上层⽤于实现短期任务或者简洁的⽤⼾交互。Qt常⽤的内置对话框有QFiledialog⽂件对话框、QColorDialog颜⾊对话框、QFontDialog字体对话框、QInputDialog 输⼊对话框和 QMessageBox消息框 。 2 对话框的分类
对话框分为 模态对话框 和 非模态 对话框。
2.1 模态对话框
模态对话框指的是显⽰后⽆法与⽗窗⼝进⾏交互是⼀种阻塞式的对话框。使⽤ QDialog::exec() 函数 调⽤。模态对话框适⽤于必须依赖⽤⼾选择的场合⽐如消息显⽰⽂件选择打印设置等。
代码示例 验证 此时如果我们在未关闭该对话框的话就不能够去点击父窗口相关的控件了。
2.2 非模态对话框
⾮模态对话框显⽰后独⽴存在可以同时与⽗窗⼝进⾏交互是⼀种非阻塞式对话框使⽤QDialog::show()函数调⽤。⾮模态对话框⼀般在堆上创建这是因为如果创建在栈上时弹出的⾮模态对话框就会⼀闪⽽过。同时还需要设置 Qt:WA_DeleteOnClose 属性⽬的是当创建多个⾮模态对话框时如打开了多个⾮模态窗⼝为了避免内存泄漏要设置此属性。⾮模态对话框适⽤于特殊功能设置的场合⽐如查找操作属性设置等。
代码示例
验证 此时在关闭对话框前我们可以还打开很多个对话框。代码中我们还设置了Qt:WA_DeleteOnClose属性来防止内存泄漏大家此时可能会有疑问我们不是将对话框加入到了MainWindow的对象树里面去了吗MainWindow销毁时这些对话框不就会自动销毁吗按道理这样是没错但是在MainWindow未退出前如果创建了非常多的对话框此时可能会造成大量空间浪费所以使用Qt:WA_DeleteOnClose属性后当我们点击对话框右上角的X后就会被自动回收。
2.3 混合属性对话框
混合属性对话框同时具有模态对话框和⾮模态对话框的属性对话框的⽣成和销毁具有⾮模态对话框属性功能上具有模态对话框的属性。使⽤ QDialog::setModal() 函数 可以创建混合特性的对话框。通常创建对话框时需要指定对话框的⽗组件。
代码示例 效果就跟模态对话框一致。 3 Qt 内置对话框
Qt 提供了多种可复⽤的对话框类型即 Qt 标准对话框。Qt 标准对话框全部继承于 QDialog 类。常⽤标准对话框如下 3.1 消息对话框 QMessageBox
消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为⽤⼾提⽰重要信息强制⽤⼾进⾏选择操作。QMessageBox类 中定义了静态成员函数可以直接调⽤创建不同⻛格的消息对话框其中包括
我这里就只演示Critical风格的消息对话框其他的也同理 代码示例 结果验证 除了使用上面的方式外QMessageBox中还内置了一些静态的成员函数
使用这些函数我们可以更加方便的创建一些简单的消息对话框比如上面的代码我们还可以这样写
QMessageBox::critical(this,消息对话框,警告、警告,QMessageBox::No,QMessageBox::Close);
同样的也能够完成上述的工作。
但是如果我们想要将自定义的按钮添加到消息对话框里面应该怎么办呢我们刻意使用addButton来进行添加 结果验证 在一些更加复杂的业务处理中我们还可以将该按钮添加一个槽函数使用connect连接即可。
那假如我们想要知道用户点击的是哪一个按钮呢 其实exec函数注意show函数是没有返回值的的返回值就可以拿到 QPushButton* buttonnew QPushButton(this);button-setText(kill all);message-addButton(button,QMessageBox::AcceptRole);int tmessage-exec();if(t QMessageBox::No)qDebug()No;else if(t QMessageBox::Yes)qDebug()Yes;elseqDebug()Other;