Widgets containing the class name Q...View are designed to work with externally connected models. That is, for QTableView , QTreeView and QListView will need to first create a model:
QStandardItemModel *model = new QStandardItemModel(4,4,this); for(int row = 0; row < 4; ++row) { for(int col = 0; col < 4; ++col) { QStandardItem *item = new QStandardItem(QString("row %0, col %1") .arg(row).arg(col)); model->setItem(row, col, item); } } QTableView *table = new QTableView(this); table->setModel(model); QTreeView *tree = new QTreeView(this); tree->setModel(model); QListView *list = new QListView(this); list->setModel(model);
By the way, in this example, one model will be available to three widgets at once, and in all of them it will be possible to edit it.
For cases when the use of the external model is redundant, you need to create widgets containing Q...Widget in the class names. This saves time, because the model in these classes ( QTableWidget , QTreeWidget and QListWidget ) is already built.
QTableWidget *table = new QTableWidget(4,4,this); table->show(); QTreeWidget *tree = new QTreeWidget(this); tree->setColumnCount(1); tree->show(); { QList<QTreeWidgetItem *> items; for(int i = 0; i < 10; ++i) { QStringList list; list.append(QString("item: %1").arg(i)); items.append(new QTreeWidgetItem(list)); } tree->insertTopLevelItems(0, items); } QListWidget *list = new QListWidget(this); new QListWidgetItem("1", list); new QListWidgetItem("2", list); new QListWidgetItem("3", list); list->show();