从QListView项目中隐藏复选框
Hide the checkbox from a QListView item
i挥舞由QStandardItemModel
支持的QListView
。在某些CirconStances下,可以检查QStandardItem
。除了项目的显示外,还显示了一个复选框。在某个时候,我想删除隐藏QStandardItem
复选框。我将其可检查状态设置为false,但不会隐藏复选框(尽管无法再检查它)。
隐藏复选框的唯一方法是用新项目替换项目。这似乎不是前面的正确方法。
这是代码:
MyModel::MyModel(QObject *parent):QStandardItemModel(parent){}
void MyModel::createItem(int row, const QString &text)
{
setItem(row, new QStandardItem(text));
}
void MyModel::setCheckable(int row)
{
item(row)->setCheckState(Qt::Unchecked);
item(row)->setCheckable(true); // A checkbox appears besides the text
}
void MyModel::hideCheckBox(int row)
{
item(row)->setCheckState(Qt::Unchecked);
item(row)->setCheckable(false); // does not work
// I need to completely replace the item for the checkbox to disapear.
// This doesn't seem the proper way to proceed
setItem(row, new QStandardItem(item(row)->data(Qt::DisplayRole).toString()));
}
有更好的方法吗?
调用setCheckState
或setCheckable
时,QT将通过添加或设置Qt::CheckStateRole
数据来更新列表项目的数据。如果存在Qt::CheckStateRole
数据,则将显示检查图标。因此,您需要从列表项目的数据图中删除它。
最后,hideCheckBox
的代码应为:
void MyModel::hideCheckBox(int row)
{
// check the item pointer
QStandardItem* pitem = item(row);
if (pitem == NULL) return;
// find and delete the Qt::CheckStateRole data
QMap<int, QVariant> mdata = itemData(pitem->index());
if (mdata.remove(Qt::CheckStateRole))
{
setItemData(pitem->index(), mdata);
}
}
希望它有用。:)
我认为项目标志定义的项目中存在复选框,因此我将以以下方式编写该功能:
void MyModel::hideCheckBox(int row)
{
// Does not set the Qt::ItemIsUserCheckable flag.
item(row)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
相关文章:
- 根据变量使Qt UI中的复选框为已选中/未选中
- "动态创建的事件处理程序"复选框
- 有没有办法在取消选中复选框时隐藏按钮?
- 如何删除Qt设计器中自定义插件的QString属性的"translatable"复选框?
- 设置复选框选项C++
- 如何在所有者描述的 MFC CMenu 派生菜单中显示复选框?
- 如何在MFC对话框应用程序中默认将复选框设置为选中?
- 如何使复选框独占
- AccessObjectFromPoint 返回客户端对象而不是复选框
- Windows 32 API:2个复选框作为一个
- 如何在 QT3 中将复选框添加到 QFileDialog 窗口
- 在 QComboBox 中切换复选框
- 调整QT创建者的复选框
- 如何在C 上创建复选框过滤器
- 如何设置按钮的背景颜色,包括复选框按钮
- 使用 ffh.getFieldType() 检查复选框 == "/Btn" 与 qpdf lib
- 如何在多行文本C++的左上角显示复选框
- Win32如何制作多个复选框并以不同的方式管理它们
- QtableWidget 标题上的复选框
- 从QListView项目中隐藏复选框