我找不到隐藏QComboBox物品的方法。到目前为止,过滤其项目的唯一方法是删除现有项目(使用.clear()方法)。然后QComboBox使用它的.addItem()方法再次重建整个。
我宁愿暂时隐藏物品。当需要他们取消隐藏时。是否可以完成对 QCombobox 项目的隐藏/取消隐藏?
Kef*_*Kef 11
如果有人仍在寻找答案:
默认情况下,QComboBox用于QListView显示弹出列表并QListView具有setRowHidden()方法:
qobject_cast<QListView *>(comboBox->view())->setRowHidden(0, true);
Run Code Online (Sandbox Code Playgroud)
编辑:根据@Tobias Leupold 的评论修复代码。
编辑:Python 版本:
qobject_cast<QListView *>(comboBox->view())->setRowHidden(0, true);
Run Code Online (Sandbox Code Playgroud)
以@kef 的回答为基础:
(请原谅关于python问题的C++)
默认情况下,QComboBox 将使用 QListView 作为视图,因此您可以执行以下操作:
QListView* view = qobject_cast<QListView *>(combo->view());
Q_ASSERT(view != nullptr);
view->setRowHidden(row, true);
Run Code Online (Sandbox Code Playgroud)
上述的一个缺点是,即使该项目将从弹出窗口中隐藏,用户仍然可以使用鼠标滚轮选择它。为了克服这个问题,为隐藏行添加以下内容:
QStandardItemModel* model = qobject_cast<QStandardItemModel*>(combo->model());
Q_ASSERT(model != nullptr);
QStandardItem* item = model->item(row);
item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
Run Code Online (Sandbox Code Playgroud)
使用上面的行将被隐藏,用户将无法使用鼠标滚轮滚动到它。
要取消隐藏它,只需执行相反的操作:
view->setRowHidden(row, false);
item->setFlags(item->flags() | Qt::ItemIsEnabled);
Run Code Online (Sandbox Code Playgroud)
您可以使用该removeItem()方法从 中删除项目QComboBox。
void QComboBox::removeItem ( int index )
从组合框中删除给定索引处的项目。如果删除索引,这将更新当前索引。
如果索引超出范围,此函数不会执行任何操作。
如果您不知道索引,请使用该findText()方法。
项目没有隐藏/取消隐藏方法QComboBox。
| 归档时间: |
|
| 查看次数: |
9116 次 |
| 最近记录: |