- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了一些有关如何为 QComboBox
小部件定义自定义模型的示例。
这是我定义模型的方式:
class LevelListModel(QAbstractListModel):
def __init__(self, parent=None, *args):
""" datain: a list where each item is a row
"""
QAbstractListModel.__init__(self, parent, *args)
self.levelList = []
def rowCount(self, parent=QModelIndex()):
return len(self.levelList)
def data(self, index, role):
if index.isValid() and role == Qt.DisplayRole:
return QVariant(index.row())
else:
return QVariant()
def addLevel(self,level):
self.beginResetModel()
self.levelList.append(level)
self.endResetModel()
我将模型设置为我的 QComboBox
:
self.levelListModel = LevelListModel()
self.ui.levelComboBox.setModel(self.levelListModel)
我通过这种方式将模型添加到我的列表中:
newLevel = Level (self.levelListModel.rowCount() + 1)
self.levelListModel.addLevel(newLevel)
该项目已正确添加,我可以在组合框中看到它,但我想将 currentIndex 更改为新项目的索引。
我猜 QAbstractListModel
可能会引发 QComboBox
可以监听的某种事件,但我还没有找到如何做到这一点。
我的问题是:
QComboBox
模型数据已更改,并监听该事件以相应地修改 currentIndex?[begin|end]ResetModel
,因为我的条目应该是一个有序的整数序列。因此,一旦列表中间的项目被删除,我就需要完全重建数据列表。我不知道这是否是正确的方法。还有更好的解决方案吗?最佳答案
1
How can I notify the QComboBox that model data changed, and listen to that event to modify currentIndex accordingly?
无需从您做事的方式监听事件。您知道模型数据何时更改,因为您自己添加了内容。只需在添加数据后更改 currentIndex
即可。
我可能会修改 addLevel
方法以返回所添加项目的 QModelIndex
,然后使用它来设置该项目的 currentIndex
QComboBox
:
class LevelListModel(QAbstractListModel):
# [skipped]
def addLevel(self,level):
self.beginInsertRows(QModelIndex(), len(self.levelList), len(self.levelList))
self.levelList.append(level)
self.endInsertRows()
return self.index(len(self.levelList)-1)
和
newLevel = Level (self.levelListModel.rowCount() + 1)
newIndex = self.levelListModel.addLevel(newLevel)
self.ui.levelComboBox.setCurrentIndex(newIndex)
2
I used [begin|end]ResetModel because my entry should be an ordered sequence of integer. So I need to rebuild the data list completely once an item in the middle of the list have been removed. I don't know if this is the right way to go. Any better solution?
这要看情况。 [begin|end]ResetModel
用于真正的彻底改变。我不明白保留整数的有序列表会如何导致单个项目添加/删除的此类更改。根据您的描述,您应该使用 [begin|end]InsertRows
和 [begin|end]RemoveRows
。
关于python - PyQt:当自定义 QAbstractListModel 数据更改时如何更改 QComboBox 中的 currentIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587211/
我正在创建一个带有 Scaffold 的应用程序,其中包含: 一个 FutureBuilder在创建 PageView 的正文中加载数据时作为其子项。 一个 BottomNavigationBar与
我是 C++ 的新手,我刚开始将一个最初在 python/Qt 中的程序移植到 C++/Qt 为了利用我可以嵌入到我的程序中的更好的终端小部件。现在我有点卡住了,我正在尝试设置如果从下拉框中选择不同的
有一个包含 5 个选项的下拉菜单。当前,选项 2 被选中。用户现在选择选项 4。onchange 事件被触发,该事件被 JS 函数捕获,该函数在选择时监听 onchange。 在 JS 函数中,我可以
如何将 currentIndex 的值更改为始终等于 0。 (CRANK1 + CRANK2) + (DRANK1 + DRANK2) 的价格应为 (0 + 选择的金额),但其相加为 (选择的金额 +
我的 Flutter 应用程序有一个底部导航栏小部件。在点击特定项目时,它会导航到另一个屏幕。但是,我不知道在这种情况下如何更新当前索引,以便突出显示选定的选项卡。这是我的代码: Bo
我有一个 QML ListView,其中委托(delegate)从另一个文件加载其组件。单击委托(delegate)项目时,我想更新 ListView。 CurrentIndex 并突出显示所选项目。
我有一个 QTableView我覆盖了 keyPressEvent方法例如当用户按下右下角的tab键时,会在底层(pandas)模型中追加一个新行。完成后,我希望当前索引位于新的右下角。这是一个分类的
我已经阅读了一些有关如何为 QComboBox 小部件定义自定义模型的示例。 这是我定义模型的方式: class LevelListModel(QAbstractListModel): def
我将纯虚方法 QStyledItemDelegate::paint 定义为: void FooViewDelegate::paint( QPainter* painter, const QStyleO
我一直在处理 PageView,我的页面 View 工作正常。但是自从我使用了一个dots_indicator 0.0.4因为它代表我现在所在的位置。我对是否该怎么做感到困惑。我的指标显示正常,但问题
我正在尝试创建一个 SwipeView,其中第一页的 interactive 属性为 false,而其他页面则启用它。我想要达到的效果是让主页链接到其他页面,但其他页面只能返回到主页(如 iOS 设置
我想将 StatelessWidget 与 BottomNavigationBar 一起使用,我将从 BLOC 控制它。我可以将 Scaffold 的 body 和 BottomNavigationB
我是一名优秀的程序员,十分优秀!