zoukankan      html  css  js  c++  java
  • 让QMainWindow也表现出QDialog的exec函数的特征

      前几天在做毕业设计项目的时候,使用的PyQt4,想实现这么样一个功能:

      场景描述:主窗口a(QMainWindow类型)和主窗口b(QMainWindow),b是通过a窗口中某一个按钮弹出来的。

      功能:b窗口弹出来之后a窗口不能进行任何操作

      实现方法:

      用过Qt的同学应该很清楚,如果是QDialog类型的话,这个功能是很容易实现的,只需要通过QDialog的exec函数就可以阻塞原窗口,但是QMainWindow是没有这样的函数的,但是我们可以怎样实现呢?

      方法1:重现QMainWindow的实现函数,增加一个exec函数(这个需要使用者对Qt的实现很熟悉,门槛相对来说比较高)

      方法2:学过window GUI编程的人应该知道窗口有两种类型:模态和非模态,简单点来讲:模态窗口就是指当前的窗口不关闭之前,其他窗口就会阻塞,不能进行任何操作,类似于:打开文件,保存文件窗口;而非模态就没有这样的限制了。

      好了,既然知道了这个概念就不难实现了,Qt中也提供了相应的函数来实现模态和非模态窗口的定义,具体只需要在构造函数中加入下面的函数就可以了:2 self.setWindowModality(QtCore.Qt.ApplicationModal);

    1 #设置窗口为模态窗口
    2 self.setWindowModality(QtCore.Qt.ApplicationModal);

      这样就可以实现了。是不是很简单?当然,一般QMainWindow都会加上下面这个函数:

    1 self.setAttribute(QtCore.Qt.WA_DeleteOnClose);

      C++下也是同样的方法。

      

  • 相关阅读:
    jqGrid实现分页
    SSH 分页收藏待看
    java 基础笔记
    Replace using VIM, reuse part of the search pattern
    机器学习之特征工程 feature engineering 70%时间
    java8 map compute和computeIfAbsent
    抄袭,山寨,借鉴
    工作效率
    年轻无知需要付出相应代价才能成熟起来
    java8中的map
  • 原文地址:https://www.cnblogs.com/seancheer/p/5094702.html
Copyright © 2011-2022 走看看