【问题标题】:QTableView shows 1d data in exactly one row/column. How to show it two-dimensionally?QTableView 在一行/列中显示一维数据。如何二维显示?
【发布时间】:2014-08-09 22:42:15
【问题描述】:

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

【问题讨论】:

标签: qt qtableview qabstractitemview


【解决方案1】:

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

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 有几个非常好的信号。有了这个信号,我们就可以与细胞进行交流。我再写一段代码sn-p。

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

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

【讨论】:

  • 感谢您的回答,但这会创建二维数据并以二维方式显示。我想要实现的是使用 QTableView 之类的东西二维显示一维数据(这不起作用,所以我可能不得不编写自己的 QAbstractItemView),但也使用 QListView 一维显示。
猜你喜欢
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2015-09-09
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
相关资源
最近更新 更多