2012-08-15 81 views
0

我敢打賭,我的問題很明顯,因爲它的標題很明顯,但它可能不是=)
所以讓我詳細解釋...我創建了一個QDockWidget,然後使用設計器將其轉換(我的意思是提升爲..)它成爲一個子類。Qt4:從QDockedWidget的子類中訪問QtDesigner創建的小部件

那麼如何正確訪問我放置的小部件?這個想法是,所有的子類的對象都是在子類中處理的。問題(如你可能知道)是

this->children().count() 

返回此:

QDockWidgetLayout(0x1022373d0) 
QDockWidgetTitleButton(0x102237510, name = "qt_dockwidget_floatbutton") 
QDockWidgetTitleButton(0x102235500, name = "qt_dockwidget_closebutton") 
QWidgetResizeHandler(0x102235de0) 
QAction(0x102221500) 

其中沒有包含QLabels等tish,我希望得到我的手)。然而,在ui_mainwindow.h中尋找一些事情。小部件位於dockWidgetContents_3,它是一個沒有父級的QWidget。所以唯一的方法似乎是通過MainWinsow的用戶界面訪問它 - > ...並考慮讓公共場合使我成爲一個「非常悲傷的熊貓」...

在此先感謝!

+0

您是否在談論「促進...」功能? – jdi 2012-08-15 23:44:28

+0

是jdi。我的意思是我推廣了它。 – 2012-08-15 23:48:26

回答

1

當你說「我已經創建了一個QDockWidget,然後使用設計器將它轉換成子類」時,我唯一能想到的就是你使用「promote to ...」動作來打開它放入QDockWidget的代碼子類的佔位符中。這意味着它希望將代碼中的版本放在該位置。如果您的設計人員具有放置在該碼頭小部件中的小部件,則它們不會自動組成該類定義。他們居住的地方是與ui對象相同的屬性,與相同的碼頭小部件平行。

如果您想要將QLabel和QPushButton組合爲該自定義子類的一部分,那麼您需要做的是在代碼中定義它們,而不是作爲可視化佈局的一部分。然後他們將成爲該實際子類的成員。

至於現在,我相信你會找到你的UI嵌套QLabel右:

ui->dockWidgetContents_3 
ui->pushButton_1 
ui->label_1 

(或者無論你選擇,包括你的類的用戶界面)

現在讓我們說你想仍然可以直觀地設計你的QDockWidget的內容區域。你可能會做的是將其設計爲一個單獨的小部件。然後將QDockWidget的dockWidgetContents升級到您的自定義QWidget。然後它將能夠將這個作品作爲一個小部件與自己的孩子。

ui->CustomDockWidget->widget()->label_1 
+0

它希望從DockWidget(我從Designer中推廣QDockWidget的代碼子類)中更改添加的QLabel的值 – 2012-08-16 00:01:52

+0

如果您沒有將子類編碼爲具有QLabel,那麼您在設計器中佈置的那些不是該子類的一部分。他們是父母的一部分。 – jdi 2012-08-16 00:04:32

+0

我的意思是我知道在哪裏可以找到它們(在MainWindow中),但我不想讓MainWindow擁有與DockedWidget相關的大量代碼及其功能。 – 2012-08-16 00:05:14