2013-02-24 49 views
3

我認爲我有一個相當基本的Qt問題,但我不能弄明白:QStackedWidget導航

我有持有QStackedWidget QMainWindow中。那裏的所有頁面小部件都是從QWidget派生的獨立類。

所以:

QMainWindow的一個類實現QStacked窗口。 堆疊窗口小部件中的所有其他頁面都添加了類,所有其他頁面都有自己的.ui,通過Designer填充按鈕和列表。

導航到不同的頁面,在主窗口中我有機會獲得:ui.stackedWidget->setCurrentIndex(2);

看來我沒有堆疊部件內訪問ui.stackedWidget另一頁上?我無法訪問ui.stackedWidget,因爲Ui是mainwindow類中的私有成員。 (由Qt自動生成 - 使用VS插件添加QT4類)

我想知道,當點擊屬於此窗口小部件中的另一個頁面的按鈕時,如何跳轉到堆棧窗口小部件中的另一個頁面?

注:

所有網頁都加入到StackedWidget在主窗口的構造函數:

內page1Widget點擊一個按鈕信號槽的
ui.stackedWidget->addWidget(page1Widget); 
ui.stackedWidget->addWidget(page2Widget); 
// etc.. 

例子:

connect(ui.btnViewData, SIGNAL(clicked()), this, SLOT(viewData())); 

::viewData() 
{ 
    // navigate to another page here. 
    // note: ui.stackedWidget->setCurrentIndex(3); is not accessible here! 
} 

回答

3

我認爲,把您的QMainWindow對象中的connect()和viewData()函數將解決您的問題,因爲主窗口可以同時訪問由子窗口小部件和QStackedWidget項目。

您可能需要編寫一個UI的getter爲每個頁面,然後像做

connect(page1Widget->getUi().btnViewData, SIGNAL(clicked()), this, SLOT(viewData))); 

希望它能幫助, 歡呼

+0

這其實與保持UI私人在子頁面幫助並通過一個公共的getter返回它們。 +1,但不能解決我的問題:這也意味着我將不得不處理與mainWindow中的特定類(page1Widget,page2Widget,..)有關的所有代碼,因此我需要訪問其他所有按鈕和小部件類也通過getter ..這明顯會使我的mainWindow幾乎處理一切,包括所有視圖等我想處理pageWidged的邏輯在他們的文件中,只使用mainWindow導航 – PathOfNeo 2013-02-25 16:35:22

+0

我非常確定有一個Qt做溝槽發射信號的方式......但我不知道如何......我沒有時間閱讀一本書..所有的學習都是通過個人項目完成的。 thx很多 – PathOfNeo 2013-02-25 16:37:11

+0

如果你需要訪問堆棧的小部件中有多個按鈕,那麼這當然不是一個好的解決方案,但是你仍然可以讓小部件自己處理其他所有東西! 我在考慮的另一個解決方案是在每個頁面中放入一個指向QStackedWidget的成員變量。你只需要在主窗口中初始化它,然後你可以處理頁面小部件中的所有內容 – fenouil 2013-02-26 13:17:34