我有一个带有大文本框的对话框。我希望用户能够最大化对话框。我已经尝试了以下选项(XML_Editor
是QDialog
实例):
XML_Editor.setWindowFlags(QtCore.Qt.Window or QtCore.Qt.WindowMaximizeButtonHint)
--显示"最大化"按钮,但不再以父为中心显示对话框
XML_Editor.setWindowFlags(QtCore.Qt.Dialog or QtCore.Qt.WindowMaximizeButtonHint or QtCore.Qt.CustomizeWindowHint)
——无作用
现在我的问题是:我该如何实现"最大化"按钮的显示和对话框弹出的中心相对于父对象?网络上的大多数资源似乎都集中在如何去掉"最大化"按钮上。有什么相反的想法吗?
主要目标是Ubuntu 10.04(默认配置),如果它也能在Windows和Mac上运行,那就太好了。
我很感激任何提示。提前谢谢。
主平台上的各种窗口管理器的行为都会有所不同,因此很难找到一个在所有情况下都能100%保证工作的解决方案。
在Linux KDE上使用默认窗口标志会生成一个带有上下文、最大化、最小化和关闭按钮的对话框;但在WindowsXP中,只有一个上下文和关闭按钮。
对于大多数平台,似乎至少需要设置WindowSystemMenuHint
和WindowMaximizeButtonHint
标志,以确保存在最大化按钮。
为了确保对话框保持在父窗口的中心,只需在对话框的构造函数中传递对父窗口的引用。
(请注意,在组合标志时,必须使用位OR运算符|
。在您的示例中,您使用boolean ORoperator or
,它将选择第一个非零值,但忽略其他值)。
以下示例为我在Linux KDE和Windows XP上生成了一个带有最大化按钮的居中对话框:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.button = QtGui.QPushButton('Show Dialog', self)
self.button.clicked.connect(self.handleButton)
layout = QtGui.QHBoxLayout(self)
layout.addWidget(self.button)
def handleButton(self):
dialog = QtGui.QDialog(self)
dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
dialog.setWindowFlags(dialog.windowFlags() |
QtCore.Qt.WindowSystemMenuHint |
QtCore.Qt.WindowMinMaxButtonsHint)
dialog.resize(160, 120)
dialog.show()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
window.resize(320, 240)
sys.exit(app.exec_())
尝试获取父窗口的几何图形,然后将对话框移动到其中心,类似于:
QRect pw = parent_widget->getGeometry();
XML_Editor.move(pw.center() - XML_Editor->rect().center());