1

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

4

1 回答 1

0

首先,如果要将数据显示为二维数组,则应编写另一个循环。例如这个:

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

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

于 2014-08-10T05:15:51.967 回答