2017-01-23 4 views
0

У нас есть 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, как показано в представлении (упорядоченные изменяются ходами вертикального сечения).

Как можно читать содержимое ячеек таким образом?

ответ

1

Итак, если я правильно понял, вы хотите изменить порядок столбцов, перемещая заголовки, а затем хотите знать, как выглядит представление. Я верю (на 90%), когда вы переупорядочиваете заголовки, это не вызывает никаких изменений в модели! а затем, если вы только начнете печатать данные модели, вы увидите только данные в порядке, как это было первоначально, прежде чем вы меняете или переупорядочиваете какой-либо столбец с заголовком.

Но вы можете поддерживать свою собственную структуру мало данных сохраняя порядок заголовков и когда вы реорганизовать заголовок слота columnMoved() будет invooked в тот момент времени, вы можете использовать метод columnViewportPosition, чтобы выяснить позиции всех столбцы и обновить небольшую структуру данных, сохраняя порядок столбцов.

Таким образом, при печати данных вы всегда должны предполагать, что заголовки находятся в таком порядке, как в вашей собственной структуре данных.

Надеюсь, что вы сделаете то, что ищете!

+0

Спасибо, Это путь. Но я думал, что могут быть и самые простые способы! – Mosi

+1

, вы также можете выполнить реальную свопинг по модели, основываясь на новом порядке, который вы вычисляли с помощью columnViewportPosition на столбцеMoved, а не поддерживаете собственную структуру! Однако это также вызовет обновления модели, которые могут вас не интересовать, и должны блокировать их с помощью QSignalBlocker при выполнении такого рода свопов! Опубликовать более простой способ, если бы вы могли его найти;) Приветствия! – PRIME

Смежные вопросы