У нас есть QTableView, который заполнен некоторыми произвольными данными. Пользователь может изменить порядок строк таблицы, сделав moveHeader подвижным. Вот пример кода:Чтение содержимого строки 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(), мы получаем доступ к содержимому ячейки, хранящейся в модели NOT, как показано в представлении (упорядоченные изменяются ходами вертикального сечения).
Как можно читать содержимое ячеек таким образом?
Спасибо, Это путь. Но я думал, что могут быть и самые простые способы! – Mosi
, вы также можете выполнить реальную свопинг по модели, основываясь на новом порядке, который вы вычисляли с помощью columnViewportPosition на столбцеMoved, а не поддерживаете собственную структуру! Однако это также вызовет обновления модели, которые могут вас не интересовать, и должны блокировать их с помощью QSignalBlocker при выполнении такого рода свопов! Опубликовать более простой способ, если бы вы могли его найти;) Приветствия! – PRIME