qtdesigner 里comboBox里的项显示不全,增加一个鼠标悬停标签,怎么做
时间: 2023-12-22 21:04:00 浏览: 155
QChart鼠标悬停显示
您可以通过使用QComboBox的QAbstractItemView子类来实现此功能。具体步骤如下:
1. 创建一个新类HoverDelegate,继承自QStyledItemDelegate类。
2. 在HoverDelegate类中实现createEditor()和paint()函数,用于创建和绘制悬停标签。
3. 在QComboBox中设置itemDelegate属性为HoverDelegate的实例。
以下是代码示例:
```python
from PyQt5.QtWidgets import QComboBox, QStyledItemDelegate, QLabel, QApplication
from PyQt5.QtGui import QPainter, QColor, QPalette
from PyQt5.QtCore import Qt, QRect
class HoverDelegate(QStyledItemDelegate):
def createEditor(self, parent, option, index):
label = QLabel(parent)
label.setAutoFillBackground(True)
palette = QPalette()
palette.setColor(label.backgroundRole(), QColor(255, 255, 255, 200))
label.setPalette(palette)
label.setAlignment(Qt.AlignCenter)
label.setMargin(2)
label.setWordWrap(True)
label.setText(index.data())
return label
def paint(self, painter, option, index):
if option.state & QStyle.State_MouseOver:
painter.fillRect(option.rect, QColor(200, 200, 200, 100))
painter.drawText(option.rect, Qt.AlignCenter, index.data())
class ComboBox(QComboBox):
def __init__(self, parent=None):
super().__init__(parent)
self.setItemDelegate(HoverDelegate(self))
if __name__ == '__main__':
app = QApplication([])
combo = ComboBox()
combo.addItems(['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6', 'Item 7', 'Item 8', 'Item 9'])
combo.show()
app.exec_()
```
在这个示例中,我们创建了一个名为HoverDelegate的新类,它继承自QStyledItemDelegate,并重写了createEditor()和paint()函数。createEditor()函数用于创建一个新的QLabel实例作为悬停标签,并设置其样式和文本。paint()函数用于绘制列表项和悬停标签,当鼠标悬停在列表项上时,绘制一个半透明的矩形作为悬停标签。
在ComboBox类的构造函数中,我们将itemDelegate属性设置为HoverDelegate的实例。这将确保在下拉列表中显示项时,使用我们自定义的委托来绘制每个项。
注意:为了使悬停标签覆盖下拉框中的其他项,我们需要将QComboBox的viewMode属性设置为QComboBox.Popup,这将使下拉框显示为一个浮动窗口,而不是下拉列表。
阅读全文