5

我对 PySide 和 Qt 很陌生。我想将 QProgressBar 添加到按钮通常所在的 QMessageBox 中。我希望有一些方法可以将 QMessageBox 子类化并更改它的布局,但我从未在代码中做过 Qt 布局,我已经用 Qt Designer 和 pyside-uic 完成了所有工作。

我在 Qt Designer 中创建了一个概念,我想通过子类化 QMessageBox 来完成类似的事情。我看过 QProgressDialog,但它太不灵活了。我希望能够使用 QMessageBox Icon 枚举作为图标。

概念

4

2 回答 2

8

QMessageBox使用QGridLayout. 因此,您可以将您的添加QProgressBar到其布局中:

msgBox = QMessageBox( QMessageBox.Warning, "My title", "My text.", QMessageBox.NoButton )

# Get the layout
l = msgBox.layout()

# Hide the default button
l.itemAtPosition( l.rowCount() - 1, 0 ).widget().hide()

progress = QProgressBar()

# Add the progress bar at the bottom (last row + 1) and first column with column span
l.addWidget(progress,l.rowCount(), 0, 1, l.columnCount(), Qt.AlignCenter )

msgBox.show()

您也可以删除按钮msgBox.setStandardButtons( QMessageBox.NoButton )。但是关闭按钮也将被禁用......

于 2013-11-14T16:36:41.860 回答
0

您可以随时将自己的布局添加到 QProgressDialog。

layout = QtGui.QHBoxLayout()
self.setLayout(layout)

# layout.setContentsMargins(0, 0, 0, 0)
layout.setAlignment(QtCore.Qt.AlignTop)

icon = QtGui.QApplication.style().standardIcon(QtGui.QStyle.SP_FileIcon)
self.label = QtGui.QLabel()
self.label.setPixmap(icon.pixmap(16, 16))
self.label2 = QtGui.QLabel("My Label")
layout.addWidget(self.label)
layout.addWidget(self.label2)
于 2013-11-20T15:49:05.420 回答