我们有一个QTableView,其中填充了一些任意数据。用户可以通过使verticalHeader可移动来重新排列表格的行。下面是一个示例代码:读取QTableView行内容的顺序与所看到的顺序不同
#include <QApplication>
#include <QTableWidget>
#include <QDebug>
#include <QVBoxLayout>
#include <QPushButton>
#include <QHeaderView>
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
QWidget base;
QTableWidget* tablWid = new QTableWidget(&base);
tablWid->verticalHeader()->setSectionsMovable(true);
tablWid->verticalHeader()->setDragEnabled(true);
//////////////////////////////////////////////////////////////////////////
// Fill the model with some data
tablWid->model()->insertColumn(0);
tablWid->model()->insertRows(0,10);
for (int i = 0; i < 10; ++i)
tablWid->model()->setData(tablWid->model()->index(i, 0), "Item " + QString::number(i));
//////////////////////////////////////////////////////////////////////////
QPushButton* dumpButton = new QPushButton("Dump Model", &base);
QObject::connect(dumpButton, &QPushButton::clicked, [tablWid]()->void {
for (int j = 0; j < tablWid->model()->rowCount();++j){
qDebug() << tablWid->model()->index(j, 0).data().toString();
}
});
QVBoxLayout* baseLay = new QVBoxLayout(&base);
baseLay->addWidget(tablWid);
baseLay->addWidget(dumpButton);
base.show();
return a.exec();
}
我们希望在相同的顺序是出现在QTableView中(如在没有存储在模型视图中看到)来读取单元格内容。目前通过调用model-> data(),我们访问存储在模型中的单元格内容,而不是像在视图中看到的那样(通过垂直部分移动来改变排序)。
如何以这种方式读取单元格内容?
谢谢,这是一种方法。但是,我认为可能还有最简单的方法! – Mosi
或者,您也可以在基于由columnMoved上的columnViewportPosition计算的新订单的情况下对模型执行实际交换,而不是维护自己的结构! 但是,这也会触发您可能不感兴趣的模型更新,并应在执行此类交换时使用QSignalBlocker阻止它们! 发布更简单的方法,如果你能找到一个;) 干杯! – PRIME