كيف تجعل إعادة represtate () و savestate () تعمل بشكل صحيح إلى فئة QTableView؟
-
01-10-2019 - |
سؤال
بادئ ذي بدء ، أردت أن أقول إن مشكلتي كانت تناقشها هنا بالفعل ، و ها هو. لكن الإجابات ليست هي جيدة ...
لذلك ، ها هو مشكلة: انا املك QTableView
الطبقة البسيطة model
, ، متصل مع tableView->setModel(model);
طريقة. على سبيل المثال ، لدي 4-5 أعمدة. لقد بدأت تطبيق مشروعي وقمت ببعض التغييرات مع عرض الأعمدة. بعد أن ضغطت على الخروج ، فإن تطبيق المشروع الخاص بي يحفظ حالة tableView->horizontalHeader()->saveState();
البيانات مع QSettings
إلى ملف. وعندما أبدأ تطبيقي مرة أخرى ، فإنه يجعل شيئًا كهذا:
tableView->horizontalHeader()->restoreState(/* data from settings ini file */);
ولكن لا شيء يحدث! عرض الأعمدة لها عرض قياسي. لم تتغير مع قيمي المخزنة! :(
شكرًا!
ملاحظة: هذه المشكلة لا تصبح واضحة مع QTreeView
صف دراسي. مع QTreeView
كل شيء على ما يرام!
المحلول
حاولت إعادة إنتاج مشكلتك ، لكن كل شيء يعمل بشكل جيد بالنسبة لي. هذا ما فعلته:
مع QT-Designer ، وضعت أ QTableView
(اسم الشيئ tbvTest
) في النموذج الخاص بي.
في مُنشئ النموذج الخاص بي ، إليك ما كتبته:
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
ui->tbvTest->setModel(new TableModel);
QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
QByteArray MyArray = MySetting.value("column_width", "").toByteArray();
ui->tbvTest->horizontalHeader()->restoreState(MyArray);
}
(لاحظ ذلك في بلدي main.cpp
, ، قمت بتعيين ApplicationName, تنظيم الاسم و منظمة)
في مدمرة النموذج الخاص بي ، إليك ما كتبته:
Widget::~Widget()
{
QByteArray MyArray = ui->tbvTest->horizontalHeader()->saveState();
QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
MySetting.setValue("column_width", MyArray);
delete ui;
}
إذا قمت بتشغيل التطبيق وقمت بتغيير عرض العمود ، فقم بإقلاع التطبيق وتشغيله مرة أخرى ، يتم استعادة عرض العمود بشكل صحيح.
هل هناك شيء أفعله مختلف عنك؟