2017-02-22 32 views
1

如何添加複選框與QListView項目?我正在嘗試,但它不會出現在qlistview中。下面是我的代碼:如何添加複選框與QListView項目?

for(int i = 0;i<myParent->listItem.size();i++) { 
    QHash<QString, QString> hash; 
    hash = myParent->listItem.at(i);  
    QStandardItem* item = new QStandardItem; 
    item->setText(hash.value("text")); 
    item->setCheckable(true); 
    model->appendRow(item); 
} 
ui->listView->setModel(model); 
+0

嘗試設置每個QStandardItem的檢查SATE明確使用'QStandardItem :: setCheckState(QT :: CheckState狀態)' – Fabio

+0

不工作,你能不能給我一些細節 – pravin

+0

我知道,在'QListWidget'你必須將檢查狀態設置爲項目以使複選框可見。也許和'QListView/QStandardItem'一樣,所以你必須在'item-> setCheckable(true);'行之後添加'item-> setCheckState(Qt :: Unchecked);'。 – Fabio

回答

1
MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    // Add QListWidgets in to yout ui dialog box. and that that object here as "ui->listWidget" 

    QListWidgetItem * item1 = new QListWidgetItem(); 
    QListWidgetItem * item2 = new QListWidgetItem(); 
    QListWidgetItem * item3 = new QListWidgetItem(); 
    QListWidgetItem * item4 = new QListWidgetItem(); 
    QListWidgetItem * item5 = new QListWidgetItem("Text 1"); 


    ui->listWidget->addItem(item1); 
    ui->listWidget->addItem(item2); 
    ui->listWidget->addItem(item3); 
    ui->listWidget->addItem(item4); 
    ui->listWidget->addItem(item5); 

    ui->listWidget->setItemWidget(item1,new QCheckBox("Test Widget")); 
    ui->listWidget->setItemWidget(item2,new QPushButton("Test Widget")); 
    ui->listWidget->setItemWidget(item3,new QRadioButton("Test Widget")); 
    ui->listWidget->setItemWidget(item4,new QCheckBox("Test Widget")); 


    ui->listWidget->setWindowTitle("QListWidget Add Widgets Example"); 

} 
+0

感謝kalpesh,但在這裏我使用QListView而不是QListWidget – pravin

0

我得到了答案,用委託填補QCheckBox中而QListView項目。

void paint (QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const 
    { 
     QStyleOptionViewItemV4 viewItemOption(option); 
      const int textMargin = QApplication::style()->pixelMetric(QStyle::PM_FocusFrameHMargin) + 1; 
      QRect newRect = QStyle::alignedRect(option.direction, Qt::AlignLeft, 
               QSize(option.decorationSize.width() + 5,option.decorationSize.height()), 
               QRect(option.rect.x() -5, option.rect.y(), 
                 option.rect.width() - (2 * textMargin), option.rect.height())); 
      viewItemOption.rect = newRect; 
     QStyledItemDelegate::paint(painter, viewItemOption, index); 

    } 
相關問題