5

まず第一に、私の問題はすでにここで議論されており、SO であり、ここにあります。しかし、答えは良いものではありません...

だから、ここに問題があります:私は単純なメソッドで接続されたQTableViewクラスを持っています。たとえば、4〜5列あります。プロジェクト アプリケーションを起動し、列幅を変更しました。[Exit] を押した後、プロジェクト アプリはデータの状態をファイルに保存します。そして、アプリを再度起動すると、次のようになります。modeltableView->setModel(model);tableView->horizontalHeader()->saveState();QSettings

tableView->horizontalHeader()->restoreState(/* data from settings ini file */);

しかし、何も起こりません!列幅は標準幅です。それらは私の保存された値で変更されません! :(

ありがとう!


QTreeViewPS: この問題はクラスでは明らかになりません。全部でQTreeViewOK!

4

1 に答える 1

9

私はあなたの問題を再現しようとしましたが、すべてがうまく機能しています。これが私がしたことです:

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

(私のでは、 ApplicationNameOrganizationNameOrganizationDomainmain.cppを設定していることに注意してください)

私のフォームのデストラクタで、これが私が書いたものです:

Widget::~Widget()
{
    QByteArray MyArray = ui->tbvTest->horizontalHeader()->saveState();
    QSettings MySetting(QSettings::IniFormat, QSettings::UserScope, "Test");
    MySetting.setValue("column_width", MyArray);

    delete ui;
}

アプリケーションを実行して列幅を変更し、アプリを終了して再度実行すると、列幅が正しく復元されます。

私があなたと違うことをしていることはありますか?

于 2010-09-10T06:18:53.587 に答える