2017-02-22 4 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 явно с помощью 'QStandardItem :: setCheckState (Qt :: CheckState состояние)' – Fabio

+0

Не работает, вы можете дать мне некоторые детали – pravin

+0

Я знаю, что в 'QListWidget' вы должны установите состояние проверки на элементы, чтобы сделать флажок видимым. Возможно, это то же самое с 'QListView/QStandardItem', поэтому вы должны добавить' item-> setCheckState (Qt :: Unchecked); 'после строки' item-> setCheckable (true); '. – 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); 

    } 
Смежные вопросы