QTableView在一行/列中显示1d数据。如何二维显示?

时间:2014-08-09 22:42:16

标签: qt qtableview qabstractitemview

假设我有一维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,遗憾的是,我认为文档有点缺乏。帮助

1 个答案:

答案 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()));
    }
}

在此示例中,当用户单击某个单元格时,单元格中的文本会告诉他此单元格的编号。 我希望,这有帮助。