كيف تجعل إعادة represtate () و savestate () تعمل بشكل صحيح إلى فئة QTableView؟

StackOverflow https://stackoverflow.com/questions/3656978

  •  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;
}

إذا قمت بتشغيل التطبيق وقمت بتغيير عرض العمود ، فقم بإقلاع التطبيق وتشغيله مرة أخرى ، يتم استعادة عرض العمود بشكل صحيح.

هل هناك شيء أفعله مختلف عنك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top