2012-08-15 3 views
0

내 질문은 제목이 분명하지만 내기가 아닐 수도 있습니다. =)
그럼 자세히 설명 드리겠습니다 ... QDockWidget을 그런 다음 디자이너를 사용하여 하위 클래스로 변환되었습니다.Qt4 : QDockedWidget의 하위 클래스에서 QtDesigner가 만든 위젯에 액세스하기

그래서 내가 배치 한 위젯에 올바르게 액세스 할 수 있습니까? 아이디어는 모든 하위 클래스의 객체가 하위 클래스 내에서 처리된다는 것입니다.

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

그리고 그들 중 누구도 내가) 내 손을 얻고 싶은 QLabels 및 기타 티쉬를 포함 : 문제는 (당신이 알고있을 수 있습니다로)

this->children().count() 

반환이 있다는 것입니다. 그러나 ui_mainwindow.h를 살펴보면 문제에 대해 알 수 있습니다. 위젯은 부모가없는 QWidget 인 dockWidgetContents_3에 있습니다. 그래서 유일한 방법은 MainWinsow의 UI를 통해 접근하는 것 같습니다.> 그리고 Ui를 공개하는 것을 생각하면 저에게 "매우 슬픈 팬더"가됩니다 ...

미리 감사드립니다!

+0

"승격 ..."기능에 대해 이야기하고 있습니까? – jdi

+0

예 jdi. 나는 그것을 승진시킨 것이었다. –

답변

1

"QDockWidget을 만든 다음이를 디자이너를 사용하여 하위 클래스로 변환했습니다."라고 말하면, "승격 ..."액션을 사용하여 이것을 의미한다고 생각할 수있는 유일한 것입니다 QDockWidget의 코딩 된 하위 클래스에 대한 자리 표시 자로 가져옵니다. 즉, 코드의 버전을 해당 위치에 배치해야합니다. 디자이너가 해당 도크 위젯 내에 배치 된 위젯을 가지고 있으면 해당 클래스 정의에 자동으로 구성되지 않습니다. 그들이 살 것 인 곳은 ui 객체의 속성으로서, 같은 도킹 위젯에 평행합니다.

QLabel 및 QPushButton을 해당 사용자 정의 하위 클래스의 일부로 구성하려면, 시각적 레이아웃의 일부가 아닌 코드로 정의해야합니다. 그렇다면 실제 하위 클래스의 멤버가됩니다. (당신이 당신의 클래스에 UI를 포함하도록 선택한 그러나 나)

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

지금 말할 수 : 지금 현재로

, 나는 당신이 당신의 UI에 중첩 QLabel의 권리를 찾을 것이라고 생각 QDockWidget의 컨텐트 영역을 시각적으로 디자인 할 수 있기를 원했습니다. 당신은 시각적으로 별도의 위젯을 디자인 할 수 있습니다. 그런 다음 QDockWidget의 dockWidgetContents을 사용자 정의 QWidget으로 승격하십시오. 그런 다음이 컴포지션을 자체 하위 항목이있는 위젯으로 배치 할 수 있습니다.

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

DockWidget (디자이너에서 QDockWidget을 승격 한 코드 하위 클래스)에서 추가 된 QLabel의 값을 변경하려고합니다. –

+0

QLabels을 포함하도록 서브 클래스를 코딩하지 않은 경우 디자이너에서 레이아웃하는 클래스는 하위 클래스의 일부 그들은 부모의 일부입니다. – jdi

+0

나는 (MainWindow에서) 그것들을 어디에서 찾을 지 알고 있지만, MainWindow가 DockedWidget과 관련된 코드와 그것의 기능을 가지고있는 것을 원하지 않는다. –