2010-09-07 39 views
4

首先,我想說,我的問題已經在這裏討論過了,在SO和here it is。但答案是沒有好的...如何使restoreState()和saveState()正確工作到QTableView類?

所以,這裏是問題:我有一個QTableView類,用一個簡單的model,與tableView->setModel(model);方法連接。例如,我有4-5列。我啓動了我的項目應用程序,並對列寬進行了一些更改。按下Exit後,我的項目應用程序將tableView->horizontalHeader()->saveState();數據的狀態保存爲QSettings到文件。當我再次啓動我的應用程序時,它會這樣:

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

但是,沒有任何反應!列寬有標準寬度。他們不會改變我的儲值! :(

感謝


!PS:這個問題不是QTreeView類變得明顯QTreeView一切正常

+0

restoreState()返回true或false來指示它是否成功。你的回報是真的嗎? – 2010-09-07 13:41:58

+0

@Arnold Spence在執行restoreState()時,我的所有'QTableView'和'QTreeView'都得到了* true *值... – mosg 2010-09-07 14:41:20

+0

在啓動時,您是否調用了restoreState()?一些簡短的搜索似乎表明,你想等到應用程序完成啓動並初始化所有內容。作爲一個實驗,您可以嘗試嚮應用程序添加一個按鈕或菜單,以在運行後調用還原,並查看它是否可行。 – 2010-09-08 00:41:14

回答

7

我試圖重現你的問題,但一切都爲我工作的罰款!這裏是我做過什麼:

隨着Qt的設計師,我把QTableView(名爲tbvTest)的窗體上

。 210

在我的窗體的構造函數,這裏是我寫:

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,我設置了ApplicationNameOrganizationNameOrganizationDomain

在我的窗體的析構函數,這裏是我寫的東西:

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

    delete ui; 
} 

如果我運行應用程序並更改列寬,退出應用程序並重新運行,列寬正確恢復。

我跟你有什麼不同嗎?

+0

非常感謝您的回答,我會盡快爲您效勞。我做了所有相同的事情,但有點複雜。獲得成功後,我會在這裏提到它! – mosg 2010-09-10 11:47:56

+0

提出問題回答,因爲我已經答應了! %) – mosg 2012-04-03 19:26:01

相關問題