找回密码
 立即注册
收起左侧

第三章窗口部件的信号与槽问题

8
回复
9605
查看
[复制链接]
累计签到:56 天
连续签到:1 天
来源: 2013-12-18 10:36:06 显示全部楼层 |阅读模式
1Qter豆
在51页

// 新建MyDialog对象    MyDialog dlg;        // 如果按下了“进入主窗口”按钮,则再次显示主界面    // 否则,因为现在已经没有显示的界面了,所以程序将退出    if(dlg.exec()== QDialog::Accepted) show();
新建了一个dlg就回到之前的登录界面了,这是为啥,我感觉要回到之前的界面应该写dialog。show啊,但是不通过

最佳答案

查看完整内容

因为他们都是MyDialog对象啊,所以是一样的界面。 在main()函数中的dlg执行完就没用了,后面的dialog是新建的,跟这里没有关系。 估计你还是不明白这里为什么用exec(),而不用show()来显示dlg,这个是因为show()显示对话框无法阻塞,也没有返回值,执行完就结束了,这样实现不了我们要的功能,我们这里想实现的是对话框不关闭就不再往下执行。 而exec()函数可以达到这个功能: int QDialog::exec() [virtual slot] Shows the ...
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-12-18 10:36:07 显示全部楼层
xinkexue 发表于 2013-12-19 21:28
我还是不太明白,51页的程序里登录对话框是dialog,主界面是w,但是从主界面返回登录界面的时候却又新建 ...

因为他们都是MyDialog对象啊,所以是一样的界面。

在main()函数中的dlg执行完就没用了,后面的dialog是新建的,跟这里没有关系。

估计你还是不明白这里为什么用exec(),而不用show()来显示dlg,这个是因为show()显示对话框无法阻塞,也没有返回值,执行完就结束了,这样实现不了我们要的功能,我们这里想实现的是对话框不关闭就不再往下执行。

而exec()函数可以达到这个功能:

int QDialog::exec() [virtual slot]
Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result.

这是帮助文档中该函数的介绍,可以看到该函数可以显示一个模态对话框,然后阻塞(就是一直执行该函数,程序不往下继续执行),只有关闭该对话框,该函数才会返回,程序才能往下继续执行。
回复

使用道具 举报

累计签到:40 天
连续签到:1 天
2013-12-18 15:06:04 显示全部楼层
dialog  是对话框   w是主界面    如果在dialog上点击了 按钮    就显示w   就写w.show();
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-12-18 15:55:53 显示全部楼层
dlg.exec()该函数就是允许对话框的,并且是一直运行,就好比是死循环,除非关闭了对话框,不然该函数不返回,就是说程序不往下继续执行。
回复

使用道具 举报

累计签到:56 天
连续签到:1 天
2013-12-19 21:28:21 显示全部楼层
QHB206 发表于 2013-12-18 15:06
dialog  是对话框   w是主界面    如果在dialog上点击了 按钮    就显示w   就写w.show(); ...

我还是不太明白,51页的程序里登录对话框是dialog,主界面是w,但是从主界面返回登录界面的时候却又新建了个名为dlg的对话框,然后就显示之前的dialog了,这个是我困惑的。为啥新建了dlg反而dialog反而显示了?
回复

使用道具 举报

累计签到:56 天
连续签到:1 天
2013-12-19 21:29:45 显示全部楼层
yafeilinux 发表于 2013-12-18 15:55
dlg.exec()该函数就是允许对话框的,并且是一直运行,就好比是死循环,除非关闭了对话框,不然该函数不返回 ...

我还是不太明白,51页的程序里登录对话框是dialog,主界面是w,但是从主界面返回登录界面的时候却又新建了个名为dlg的对话框,然后就显示之前的dialog了,这个是我困惑的。为啥新建了dlg反而dialog反而显示了?
回复

使用道具 举报

累计签到:56 天
连续签到:1 天
2013-12-21 12:31:37 显示全部楼层
yafeilinux 发表于 2013-12-20 09:52
因为他们都是MyDialog对象啊,所以是一样的界面。

在main()函数中的dlg执行完就没用了,后面的dialog是新 ...

谢谢老大的回答,您看我这么理解对么?

界面文件里有个mydialog.ui的文件,这样的话不论是main函数里的MyDialog类的dialog还是mywidget.cpp里的MyDialog的dlg都是指的这个mydialog.ui界面,就是说只要新建了MyDialog的对象,都是指的那个myDialog.ui界面。这么理解对么?

还有个问题,如果界面文件里有多个mydialog.ui的文件,那新建一个MyDialog的对象,怎么确定它是那一个ui界面呢?
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-12-23 13:47:51 显示全部楼层
xinkexue 发表于 2013-12-21 12:31
谢谢老大的回答,您看我这么理解对么?

界面文件里有个mydialog.ui的文件,这样的话不论是main函数里的M ...

这个mydialog.ui其实是MyDialog类的一部分,实际编程时会被生成对应的ui_mydialog.h文件。一个MyDialog类只对应一个ui文件,所以不存在多个ui界面的问题。

如果要使用多个对话框,需要再新建一个类的。


感觉你需要把C++类的内容再熟悉一下!
回复

使用道具 举报

累计签到:56 天
连续签到:1 天
2017-3-23 11:51:40 显示全部楼层
回顾下当年愚蠢的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了