2015-11-23 39 views
0

我正嘗試將專屬複選框作爲QListView項目。我使用QStandardItemModel作爲QStandardItem的模型。QListView中的獨佔複選框

我動態地添加項目到列表中,並設置它可檢查:

QStandardItem *item = new QStandardItem(treeView->model()->data(index).toString()); 
item->setCheckable(true); 
m_categoriesModel->appendRow(item); 

我嘗試了所有物品連接到QSignalMapperQStandardItem沒有checked(bool)信號(基本上它沒有任何)。

有什麼辦法可以解決這個問題嗎?

+0

爲什麼要這樣做?爲什麼不使用附加到treeView的模型?這似乎是你對付MVC模式的全部重點。 – RobbieE

回答

1

您可以按照下面描述的方式進行設置。首先將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!"; 
} 
0

實際上有整整做這個類: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); 
//... 

...至少爲手動添加按鈕。當然,您也可以將它用於模型,但它會要求您查看視圖中的所有複選框元素...

+0

不幸的是'QStandardItem'沒有繼承'QAbstractButton',所以我不能使用這個解決方案。 – Sajmplus

相關問題