QListView 中的独占复选框
Exclusive checkbox in QListView
我正在尝试将独占复选框作为 QListView
项目。我使用 QStandardItemModel
作为带有 QStandardItem
的模型。
我正在向列表中动态添加项目并将其设置为可检查:
QStandardItem *item = new QStandardItem(treeView->model()->data(index).toString());
item->setCheckable(true);
m_categoriesModel->appendRow(item);
我尝试将所有项目连接到 QSignalMapper
,但 QStandardItem
没有 checked(bool)
信号(基本上没有)。
有什么办法可以解决这个问题吗?
您总是可以按照下面描述的方式制作。首先将 ListView 的点击信号连接到将处理您的项目点击的插槽。其次,在插槽内,您可以从 QModelIndex 获取项目并检查项目的状态。下面是伪代码:
例如ListView的构造函数中:
connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(_handleItemClicked(QModelIndex)));
ListView 的插槽:
void ListView::_handleItemClicked(QModelIndex index)
{
QStandardItem* item = _model->itemFromIndex(index);
if( item->checkState() == Qt::Checked) qDebug() << "Checked!";
}
实际上有一个 class 可以做到这一点:QButtonGroup
使用方便:
QButtonGroup *group = new QButtonGroup(this);
group->setExclusive(true);//now only one will be checked at a time
//add all buttons
group->addButton(this->ui->myFirstCheckbox);
//...
...至少对于手动添加的按钮而言。当然你也可以将它用于模型,但它需要你在视图中找到所有复选框元素...
我正在尝试将独占复选框作为 QListView
项目。我使用 QStandardItemModel
作为带有 QStandardItem
的模型。
我正在向列表中动态添加项目并将其设置为可检查:
QStandardItem *item = new QStandardItem(treeView->model()->data(index).toString());
item->setCheckable(true);
m_categoriesModel->appendRow(item);
我尝试将所有项目连接到 QSignalMapper
,但 QStandardItem
没有 checked(bool)
信号(基本上没有)。
有什么办法可以解决这个问题吗?
您总是可以按照下面描述的方式制作。首先将 ListView 的点击信号连接到将处理您的项目点击的插槽。其次,在插槽内,您可以从 QModelIndex 获取项目并检查项目的状态。下面是伪代码:
例如ListView的构造函数中:
connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(_handleItemClicked(QModelIndex)));
ListView 的插槽:
void ListView::_handleItemClicked(QModelIndex index)
{
QStandardItem* item = _model->itemFromIndex(index);
if( item->checkState() == Qt::Checked) qDebug() << "Checked!";
}
实际上有一个 class 可以做到这一点:QButtonGroup
使用方便:
QButtonGroup *group = new QButtonGroup(this);
group->setExclusive(true);//now only one will be checked at a time
//add all buttons
group->addButton(this->ui->myFirstCheckbox);
//...
...至少对于手动添加的按钮而言。当然你也可以将它用于模型,但它需要你在视图中找到所有复选框元素...