Search code examples
c++qtqlistview

QListView not showing data in model


When I run the program, the list view doesn't show the data in the model I've set up. What am I missing/where am I going wrong?

QStandardItemModel mymodel(this);

    QStandardItem *item1 = new QStandardItem("This is item one");
    item1->setData("item", Qt::UserRole + 1);
    mymodel.appendRow(item1);
    QStandardItem *item2 = new QStandardItem("This is item two");
    item2->setData("item", Qt::UserRole + 1);
    mymodel.appendRow(item2);
    QStandardItem *item3 = new QStandardItem("This is item three");
    item3->setData("item", Qt::UserRole + 1);
    mymodel.appendRow(item3);

    ui->listView->setResizeMode(QListView::Adjust);
    ui->listView->setWordWrap(true);
    ui->listView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
    ui->listView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->listView->setModel(&mymodel);
    ui->listView->showNormal();

Solution

  • Thanks to @vahancho - you should allocate from heap. Here's the revised snippet:

    QStandardItemModel *mymodel = new QStandardItemModel(this);
    
        QStandardItem *item1 = new QStandardItem("This is item one");
        item1->setData("item", Qt::UserRole + 1);
        mymodel->appendRow(item1);
        QStandardItem *item2 = new QStandardItem("This is item two");
        item2->setData("item", Qt::UserRole + 1);
        mymodel->appendRow(item2);
        QStandardItem *item3 = new QStandardItem("This is item three");
        item3->setData("item", Qt::UserRole + 1);
        mymodel->appendRow(item3);
    
        ui->listView->setResizeMode(QListView::Adjust);
        ui->listView->setWordWrap(true);
        ui->listView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
        ui->listView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        ui->listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        ui->listView->setModel(mymodel);
        ui->listView->showNormal();