【学习笔记】C++ GUI Qt4 第三章 3.5 使用对话框和3.6存储设置

3.5 使用对话框

这一节将说明如何在Qt中使用对话框——如何创建、初始化以及运行它们,并且对用户交互中的选择做出响应。本节将会使用在第2章中创建的Find、GotoCell和Sort对话框,也会创建一个简单的About 对话框。我们从如图3.12所示的Find对话框开始。由于希望用户能够在Spreadsheet窗口和Find对话框之间进行切换,所以Find对话框必须是非模态(modeless)的。非模态窗口就是运行在应用程序中对于任何其他窗口都独立的窗口。

void MainWindow::find()
{
   
    //创建非模态对话框时,通常会把它的信号连接到能够对用户的交互做出响应的那些槽上。
    if (!findDialog) {
   
        findDialog = new FindDialog(this);
        connect(findDialog, SIGNAL(findNext(const QString &,
                                            Qt::CaseSensitivity)),
                spreadsheet, SLOT(findNext(const QString &,
                                           Qt::CaseSensitivity)));
        connect(findDialog, SIGNAL(findPrevious(const QString &,
                                                Qt::CaseSensitivity)),
                spreadsheet, SLOT(findPrevious(const QString &,
                                               Qt::CaseSensitivity)));
    }
    /* Find对话框是一个可以让用户在电子制表软件中搜索文本的窗口。当用户单击Edit->Find时,就会调用find( )槽来弹出Find对话框。
     * 这时,就可能出现下列几种情形:
     * ●这是用户第一次调用Find对话框。
     * ●以前曾经调用过Find对话框,但用户关闭了它。.
     * ●以前曾经调用过Find对话框,并且现在它还是可见的。
     * 如果Find对话框还不曾存在过,就可以创建它并且把它的findNext()信号和findPrevious()信号与Spreadsheet中相对应的那些槽连接起来。
     * 本应该在MainWndow的构造函数中创建这个对话框,但是推迟对话框的创建过程将可以使程序的启动更加快速。
     * 还有,如果从来没有使用到这个对话框,那么它就决不会被创建,这样可以既节省时间又节省内存。
     * 然后,调用show()、raise()和activateWindow()来确保窗口位于其他窗口之上并且是可见的和激活的。
     * 只调用show()就足以让一个隐藏窗口变为可见的、位于最上方并且是激活的,
     * 但是也有可能是在Find对话框窗口已经是可见的时候又再次调用了它,在这种情况下,show()调用可能什么也不做,
     * 那么就必须调用raise()和activateWindow()让窗口成为顶层窗口和激活状态。
     */
    findDialog->show();
    findDialog->raise();
    findDialog->activateWindow();
}

现在看一下如图3.13所示的Go to Cell对话框。我们希望用户可以弹出、使用和关闭它,但是却不希望让这个窗口能够与应用程序中的其他窗口相互切换。也就是说,GotoCell对话框窗口必须是模态(modal)的。模态窗口就是-个在得到调用可以弹出并可以阻塞应用程序的窗口,从而会从调用发生开始起妨碍其他的任意处理或者交互操作,直到关闭该窗口为止。前面使用的文件对话框和消息框就是模态的。

在这里插入图片描述

如果对话框是通过show()调用的,那么它就是非模态对话框[除非此后又调用了setModal(),才会让它变为模态对话框]。但是,如果它是通过exec()调用的,那么该对话框就会是模态对话框。

void MainWindow::goToCell(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值