假设我有一维QStandardItemModel和QTableView实例:
QStandardItemModel model;
for (int i = 1; i < 10; ++i) {
QStandardItem *item = new QStandardItem(QString::number(i));
model.appendRow(item);
}
QTableView tableView;
tableView.setModel(&model);
tableView.show();
这显示了第一列中的数据,但我希望以这样的二维方式显示:
1 2 3
4 5 6
7 8 9
此外,用户应该能够选择数据,这意味着自定义QStyledItemDelegate可能不是实现此目的的方法。
因此需要创建一个自定义QAbstractItemView,遗憾的是,我认为文档有点缺乏。帮助
答案 0 :(得分:0)
首先,如果你想将show data作为2d数组,你应该写另一个循环。例如:
int counter = 0;
QStandardItemModel *model = new QStandardItemModel(this);
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
{
counter++;
QStandardItem *item = new QStandardItem(QString::number(counter));
model->setItem(i,j,item);
}
ui->tableView->setModel(model);
在我的电脑上,这完全符合您的要求。
其次。用户可以对单元格执行不同的操作。 QTableView有一些非常好的信号。通过此信号,我们可以与细胞进行通信。我又写了一段代码片段。
int counter = 0;
QStandardItemModel *model = new QStandardItemModel(this);
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
{
counter++;
QStandardItem *item = new QStandardItem(QString::number(counter));
model->setItem(i,j,item);
}
connect(ui->tableView,SIGNAL(clicked(QModelIndex)),this,SLOT(clickedIndex(QModelIndex )));
ui->tableView->setModel(model);
//...
void MainWindow::clickedIndex(QModelIndex index)
{
if(index.isValid())
{
ui->tableView->model()->setData(index,QString("you press %1 , %2 cell").arg(index.row()).arg(index.column()));
}
}
在此示例中,当用户单击某个单元格时,单元格中的文本会告诉他此单元格的编号。 我希望,这有帮助。