• 8092阅读
  • 6回复

[提问]QT下多窗口开发问题 [复制链接]

上一主题 下一主题
离线bakasen
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-29
虽然以前开发过QT的窗口程序,但是都是只有一个窗口,由于需求,这次要开发一个两个窗口的程序,我先创建了一个mainwindow的窗口,再在这个窗口基础上,通过按钮,再打开一个Widget窗口。
我在继承mainwindow类中,加入了一个继承widget的类的对象指针sw。
再通过触发函数,调用下面代码。

  1. sw=new simulate(this);sw->show();


由于关闭不了,widget窗口挡住了我的菜单,而且后面的按钮还可以正常使用。
我想把widget窗口弹出后,使父窗口不能获得焦点,只有当子窗口关闭时,焦点才会回到父窗口,但是不知道有什么方法解决,希望大大会帮我解决这个问题,谢谢!!

离线zzjin

只看该作者 1楼 发表于: 2011-04-29
如果是想要的模态窗口的话直接show之后使用"sw.exec();"强制运行widget内置的消息循环
离线bakasen
只看该作者 2楼 发表于: 2011-04-29
引用第1楼zzjin于2011-04-29 18:48发表的  :
如果是想要的模态窗口的话直接show之后使用"sw.exec();"强制运行widget内置的消息循环


不行。。。。这样用会出错。。
离线dbzhang800

只看该作者 3楼 发表于: 2011-04-29
引用楼主bakasen于2011-04-29 18:25发表的 QT下多窗口开发问题 :
虽然以前开发过QT的窗口程序,但是都是只有一个窗口,由于需求,这次要开发一个两个窗口的程序,我先创建了一个mainwindow的窗口,再在这个窗口基础上,通过按钮,再打开一个Widget窗口。
我在继承mainwindow类中,加入了一个继承widget的类的对象指针sw。
再通过触发函数,调用下面代码。

  1. sw=new simulate(this);sw->show();


.......

按你的描述,你需要的是模态的对话框。或者把你的这个Widget直接设为模态:

可以瞄一眼这个
http://blog.csdn.net/dbzhang800/archive/2011/04/03/6300416.aspx
离线bakasen
只看该作者 4楼 发表于: 2011-04-29
引用第3楼dbzhang800于2011-04-29 18:54发表的  :
按你的描述,你需要的是模态的对话框。或者把你的这个Widget直接设为模态:
可以瞄一眼这个
http://blog.csdn.net/dbzhang800/archive/2011/04/03/6300416.aspx
.......


在widget中找不到你所以说的setModal,但是我找到了一个setWindowModality的函数(可能是我的QT是新版的吧),看它的帮助里也大概是这个意思,但是试过了还是不行,另一个窗口的按钮依然可能使用。
它里面有一句This property only makes sense for windows.这句意思是对window系统有效还是指对窗口有效,如果是窗口有效,我试过了还是不行。。。
离线dbzhang800

只看该作者 5楼 发表于: 2011-04-29
引用第4楼bakasen于2011-04-29 19:08发表的  :
在widget中找不到你所以说的setModal,但是我找到了一个setWindowModality的函数(可能是我的QT是新版的吧),看它的帮助里也大概是这个意思,但是试过了还是不行,另一个窗口的按钮依然可能使用。
它里面有一句This property only makes sense for windows.这句意思是对window系统有效还是指对窗口有效,如果是窗口有效,我试过了还是不行。。。


这个... 尽管提到了QWidget有两个函数可以设置模态,但没告诉你QWidget有setModal这个函数吧?

1. 我现在在ubuntu系统下
2. 我这边的程序工作正常

3. 一个完整的例子如下:你应该可以直接运行(只要有pyside或pyqt4)
  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. '''
  4. Copyright (C) 2011 dbzhang800#gmail.com
  5. All rights reserved.
  6. '''
  7. try:
  8.     from PySide import QtCore, QtGui
  9. except ImportError:
  10.     from PyQt4 import QtCore, QtGui
  11.     
  12. class Widget(QtGui.QWidget):
  13.     def __init__(self, parent=None):
  14.         super(Widget, self).__init__(parent)
  15.     def mousePressEvent(self, evt):
  16.         self.w = QtGui.QWidget()
  17.         self.w.setWindowModality(QtCore.Qt.ApplicationModal)
  18.         self.w.show()
  19.         
  20. if __name__ == '__main__':
  21.     import sys
  22.     app = QtGui.QApplication(sys.argv)
  23.     w = Widget()
  24.     w.show()
  25.     sys.exit(app.exec_())

离线bakasen
只看该作者 6楼 发表于: 2011-04-29
引用第5楼dbzhang800于2011-04-29 19:24发表的  :
这个... 尽管提到了QWidget有两个函数可以设置模态,但没告诉你QWidget有setModal这个函数吧?
1. 我现在在ubuntu系统下
2. 我这边的程序工作正常
.......


我刚才自己试了一下Dialog的窗口,这个的确可以设置到模态,widget真的不行.......而且我的那个跟你的代码形式都不同。。。。。
快速回复
限100 字节
 
上一个 下一个