1

在 qt 设计器(最好)或 python 中,有没有办法删除标准的 windows 顶部栏并用我自己的替换它,或者至少格式化它。这类似于新版本的 photoshop、maya、3ds max、chrome 等的外观。

我找到了这两篇文章,但除了在 C++ 中,我需要在 python 中工作之外,它们从未得到解决。

http://qt-project.org/forums/viewthread/3331/ http://qt-project.org/forums/viewthread/3847/

我确实从中得到的是 FramelessWindowHint ,它可以满足我的需求,但正如他们在文章中提到的那样,它消除了许多 Windows 功能,例如调整大小。有没有办法手动重新引入角拖动和调整大小/关闭选项?

更具体地说,我已经有了在 qt 设计器中设计的程序,并使用 pyuic4 来制作我的 python 文件。这是我加载 gui 的主要功能:

global globalMoAnWindow
app = QtGui.QApplication(sys.argv)
app.setStyle(QtGui.QStyleFactory.create('plastique'))
globalMoAnWindow = MoAnWin()
globalMoAnWindow.setWindowFlags(QtCore.Qt.FramelessWindowHint)
globalMoAnWindow.showMaximized()
sys.exit(app.exec_())

对于任何想要使用 python 并拖动小部件的人,我发现了这段代码:

def mousePressEvent(self, event):
    if event.button() == QtCore.Qt.LeftButton:
        self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
        event.accept()

def mouseMoveEvent(self, event):
    if event.buttons() == QtCore.Qt.LeftButton:
        self.move(event.globalPos() - self.dragPosition)
        event.accept()

我放在处理主窗口的类中

4

1 回答 1

4

您可以使用QSizeGrip将调整大小控件添加到窗口。它们的行为与系统行为完全相同。您应该创建一个布局并将 QSizeGrip 放在窗口的每个角落。

widget = QWidget()
widget.setWindowFlags(Qt.FramelessWindowHint)
layout = QGridLayout(widget)
layout.setContentsMargins(0, 0, 0, 0)
sizeGrip1 = QSizeGrip(widget)
sizeGrip2 = QSizeGrip(widget)
sizeGrip3 = QSizeGrip(widget)
sizeGrip4 = QSizeGrip(widget)
layout.addWidget(sizeGrip1, 0, 0)
layout.addWidget(sizeGrip2, 0, 2)
layout.addWidget(sizeGrip3, 2, 2)
layout.addWidget(sizeGrip4, 2, 0)
label = QLabel("Contents")
layout.addWidget(label, 1, 1)

widget.show()

QMainWindow 的变体:

window = QMainWindow()
widget = QWidget()
window.setCentralWidget(widget)
window.setWindowFlags(Qt.FramelessWindowHint)
layout = QGridLayout(widget)
#...
window.show()

实现关闭按钮很简单。只需将 QPushButton 或 QToolButton 添加到您的布局并调用QWidget::close其 onclick 处理程序。

拖动更加复杂,因为没有标准的小部件来执行此操作。此答案中描述了一个解决方案。

于 2013-06-10T07:15:17.077 回答