gpt4 book ai didi

python - Qt:在映射到 AbstractListModel 的 LineEdit 小部件上显示工具提示

转载 作者:行者123 更新时间:2023-12-01 02:56:52 29 4
gpt4 key购买 nike

情况

下面是一个 Qt 示例,其中包含一个 AbstractListModel 和两个链接到该模型的显示小部件(一个 ListView 和一个 LineEdit) :

from PyQt5 import QtCore, QtWidgets

class ListModel(QtCore.QAbstractListModel):
def __init__(self, data_values, tooltips, parent=None):
super().__init__(parent)
self.data_values = data_values
self.tooltips = tooltips


def rowCount(self, parent=QtCore.QModelIndex()):
return len(self.data_values)


def data(self, index, role=QtCore.Qt.DisplayRole):
if (role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole):
return self.data_values[index.row()]
elif role == QtCore.Qt.ToolTipRole:
return self.tooltips[index.row()]


class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()

data_values = ['apple', 'pumpkin', 'orange']
tooltips = [
"Don't accept when offered by evil queen in disguise.",
"Excellent halloween decoration.",
"Good source of Vitamin C.",
]
self.list_model = ListModel(data_values, tooltips)

self.line_edit = QtWidgets.QLineEdit(parent=self)
self.line_edit.setReadOnly(True)

self.list_view = QtWidgets.QListView(parent=self)
self.list_view.setModel(self.list_model)
self.list_view.setCurrentIndex(self.list_model.index(0))

self.mapper = QtWidgets.QDataWidgetMapper(parent=self)
self.mapper.setModel(self.list_model)
self.mapper.addMapping(self.line_edit, 0)
self.mapper.toFirst()

self.list_view.selectionModel().currentRowChanged.connect(self.mapper.setCurrentModelIndex)

layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.list_view, 0)
layout.insertSpacing(1, 40)
layout.addWidget(self.line_edit, 2)
self.setLayout(layout)


qt_application = QtWidgets.QApplication([])
window = Window()
window.show()
qt_application.exec_()

我已经配置了 AbstractListModeldata 方法,以向链接的小部件提供工具提示文本。当鼠标光标放在 ListView 中的某个项目上时,确实会出现工具提示。但是,当鼠标光标置于 LineEdit 上时,不会出现工具提示。

enter image description here

问题

我希望 LineEdit 显示一个工具提示,其中包含链接的 AbstractListModel 提供的文本。有什么办法可以实现这一目标吗?

最佳答案

使用QDataWidgetMapper不可能实现这一点。 QDataWidgetMapper 始终使用模型的 Qt::EditRole 值。人们可能建议使用 addMapping 的重载版本。和一个 TableModel,其中一列(section)用于显示,一列用于工具提示,但这是不可能的,因为 QDataWidgetMapper 只允许您实现one-to-one mapping :

If the widget is already mapped to a section, the old mapping will be replaced by the new one.

解决方案

最简单的解决方案是自己创建一个插槽,将其连接到 currentRowChanged 信号,并手动设置工具提示 ( QWidget::setToolTip ) 和文本 ( QLineEdit::setText )。

关于python - Qt:在映射到 AbstractListModel 的 LineEdit 小部件上显示工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44142338/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com