模态和非模态

        模态(Modal)和非模态(Non-modal)是窗口或对话框在应用程序中显示和交互的两种方式,它们直接影响用户在界面中的操作顺序和自由度。

1. 模态对话框(Modal Dialog)

模态对话框是一种阻塞窗口,它会阻止用户与应用程序中的其他窗口进行交互,直到用户关闭该对话框。通常情况下,当模态对话框打开时,用户必须先完成该对话框的操作(例如点击“确定”或“取消”)才能返回到主窗口或其他部分。

特点:
  • 当模态对话框显示时,用户不能与父窗口或其他窗口交互
  • 模态对话框的典型用途是需要用户做出决定或完成某项任务,比如确认对话框输入对话框警告框
  • 通过 QDialog::exec() 方法启动模态对话框,该方法会阻塞执行,直到对话框被关闭。
常见场景:
  • 当你需要强制用户完成某个操作或确认信息时,例如保存文件前的确认框、用户登录窗口等。
Qt 示例:
  • QMessageBoxQFileDialogQInputDialog 等类通常默认是模态的。
  • 启动模态对话框的典型方式是调用 exec()
QMessageBox msgBox;
msgBox.setText("Are you sure you want to delete this file?");
msgBox.exec();  // 模态,对话框阻塞,直到用户作出决定

2. 非模态对话框(Non-modal Dialog)

非模态对话框是一种不阻塞的窗口,允许用户与应用程序中的其他窗口同时进行交互。在非模态对话框显示时,用户仍然可以继续操作主窗口或其他窗口,而不必先关闭对话框。

特点:
  • 当非模态对话框打开时,用户可以自由切换到应用程序的其他部分进行操作。
  • 这种模式通常用于辅助任务,不要求用户必须立即处理该对话框。
  • 通过 QDialog::open()QWidget::show() 方法启动非模态对话框。
常见场景:
  • 当你希望提供一个可以参考或随时关闭的辅助窗口时,比如查找和替换窗口帮助窗口等。
Qt 示例:
  • 启动非模态对话框的典型方式是调用 show()open(),而不是 exec()
QDialog *dialog = new QDialog(this);
dialog->setWindowTitle("Non-modal Dialog");
dialog->show();  // 非模态,对话框显示时,主窗口仍可交互

3.总结

        那么我们说模态呢,就是一种阻塞窗口,用户和应用程序不能切换到其他窗口进行交互,会阻塞等待当前窗口选择完毕才能与其他窗口进行交互,非模态是一种非阻塞窗口,允许用户和应用程序与其他窗口进行交互,用户不必操作完当前窗口就能切换到其他窗口进行操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值