zoukankan      html  css  js  c++  java
  • 多文档

    在使用 QMainWindow 作为主窗口时, 经常会用到多文档的方式对文件进行显示, 本例通过一个简单的例子分析如何实现多文档的布局方式。例效果图如下

    Qt 提供了一个 QWorkspace 类,利用 QWorkspace 类可以很方便地实现多文档的应用。QWorkspace 类继承自 QWidget 类,因此只需在 QMainWindow 主窗口中把 QWorkspace 对象设置为中央窗体即可。QWorkspace 类提供了许多对子窗口进行排序的函数接口,如 cascade(),arrangeIcon(),title()等。

    代码:

     1 #coding: utf-8
     2 from PyQt4.QtCore import *
     3 from PyQt4.QtGui import *
     4 import sys
     5 
     6 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
     7 
     8 class MainWidget(QMainWindow):
     9     def __init__(self, parent=None):
    10         super(MainWidget, self).__init__(parent)
    11         self.setWindowTitle(self.tr("多文档窗口"))
    12         self.workSpace = QWorkspace()
    13         #设置主窗口的中央窗体为 QWorkspace 对象,以使主窗口能实现多文档的布局方式
    14         self.setCentralWidget(self.workSpace)
    15 
    16         window1 = QMainWindow()
    17         window1.setWindowTitle(self.tr("窗口1"))
    18         edit1 = QTextEdit(self.tr("子窗口1"))
    19         window1.setCentralWidget(edit1)
    20         window2 = QMainWindow()
    21         window2.setWindowTitle(self.tr("窗口2"))
    22         edit2 = QTextEdit(self.tr("子窗口2"))
    23         window2.setCentralWidget(edit2)
    24         window3 = QMainWindow()
    25         window3.setWindowTitle(self.tr("窗口3"))
    26         edit3 = QTextEdit(self.tr("子窗口3"))
    27         window3.setCentralWidget(edit3)
    28 
    29         self.workSpace.addWindow(window1)
    30         self.workSpace.addWindow(window2)
    31         self.workSpace.addWindow(window3)
    32         #createMenu()函数创建主窗口的菜单栏
    33         self.createMenu()
    34         self.slotScroll()
    35 
    36     def createMenu(self):
    37         layoutMenu = self.menuBar().addMenu(self.tr("布局"))
    38         #现对子窗口的 arrangeIcons 布局,它的布局方式是将所有子窗口以标题栏的方式在主窗口的底部进行排列,
    39         # 如下图所示。可直接把菜单的 triggered()信号与QWorkspace 对象的 arrangeIcons()方法相连。
    40         #注意此排列方式,仅对已经最小化的子窗口起作用。
    41         arrange = QAction(self.tr("排列图标"), self)
    42         self.connect(arrange, SIGNAL("triggered()"),self.workSpace,SLOT("arrangelcons()"))
    43         layoutMenu.addAction(arrange)
    44         #实现子窗口的 tile 布局,tile 的意思是用子窗口把主窗口像铺瓦片或贴瓷砖一样排满,如下图所示,
    45         # 可直接连接 QWorkspace 对象的 tile()函数实现
    46         tile = QAction(self.tr("平铺"), self)
    47         self.connect(tile, SIGNAL("triggered()"), self.workSpace, SLOT("tile()"))
    48         layoutMenu.addAction(tile)
    49 
    50         cascade = QAction(self.tr("层叠"), self)
    51         self.connect(cascade, SIGNAL("triggered()"), self.workSpace, SLOT("casxade()"))
    52         layoutMenu.addAction(cascade)
    53 
    54         otherMenu = self.menuBar().addMenu(self.tr("其它"))
    55         scrollAct = QAction(self.tr("滚动"), self)
    56         self.connect(scrollAct, SIGNAL("triggered()"), self.slotScroll)
    57         otherMenu.addAction(scrollAct)
    58         otherMenu.addSeparator()
    59 
    60         nextAct = QAction(self.tr("下一个"), self)
    61         self.connect(nextAct, SIGNAL("triggered()"), self.workSpace, SLOT("activateNextWindow()"))
    62         otherMenu.addAction(nextAct)
    63 
    64         previoustAct = QAction(self.tr("上一个"), self)
    65         self.connect(previoustAct, SIGNAL("triggered()"), self.workSpace, SLOT("activatePreviousWindow()"))
    66         otherMenu.addAction(previoustAct)
    67     #slotScroll()槽函数完成对多文档空间 QWorkspace 的滑动条进行设置
    68     def slotScroll(self):
    69         self.workSpace.setScrollBarsEnabled(not self.workSpace.scrollBarsEnabled())
    70 
    71 app = QApplication(sys.argv)
    72 main = MainWidget()
    73 main.show()
    74 app.exec_()




  • 相关阅读:
    Struts2声明式异常处理
    几种常用的过滤器
    Jdk 和 Tomcat的 安装。(旧版本,请看新版本3篇)
    java 判断字符串是否相等
    PreparedStatement 查询 In 语句 setArray 等介绍。
    String、StringBuffer与StringBuilder之间区别
    IntelliJ IDEA 里 查看一个函数注释的方法是 ctrl+q
    Java字符串拼接效率对比
    Java 中判断字符串是否为空
    IntelliJ IDEA + Tomcat ;On Upate Action 与 On Frame Deactivation
  • 原文地址:https://www.cnblogs.com/nju2014/p/4540550.html
Copyright © 2011-2022 走看看