QListView中的Exclusive复选框

Exclusive checkbox in QListView

本文关键字:复选框 Exclusive 中的 QListView      更新时间:2023-10-16

我正在尝试将独占复选框作为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!";
}

实际上有一个类可以做到这一点: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);
//...

至少对于手动添加的按钮。当然,您也可以将其用于模型,但这需要您在视图中找到所有复选框元素。。。