开发者

Accessing the child UI elements in a Qt UI

开发者 https://www.devze.com 2022-12-15 02:12 出处:网络
I have defined a UI (let\'s call it myUI) using the Qt designer, and using it in my applications. I need to access all the sub-widgets (QToolButtons) in myUI.I want to get all the subwidgets as a QObj

I have defined a UI (let's call it myUI) using the Qt designer, and using it in my applications. I need to access all the sub-widgets (QToolButtons) in myUI. I want to get all the subwidgets as a QObjectList.

Is there any way to do this?

The QObject::children() doesn't work here because the Qt UI Compiler, when converting the .ui file to a C++ class, doesn't define the ui_myUI class as a subclass of any QObject derived class. Is there any way to force it to do this, and then use the child开发者_JAVA技巧ren() function?

Thanks.


Call children() on the top level widget instance.

Assuming your top level widget is called 'tlWidget':

myUI->tlWidget->children()


Usually what happens is that you either inherit from the UI class or you have it as a member and invoke it's setupUi method, sending this as the parameter. The default in Qt Creator/Designer is to have it as a member, named ui.
You can use this member to access any widgets defined in your form.


You might find this interesting:

  • Designer: Using a .ui file in your application


How do you use your UI ?

(a) something like:

class MyWidget: public QWidget, protected myUI 
{
//...
};

(b) or rather something like:

class MyWidget: public QWidget
{
protected:
    myUI ui;
};

The Solution is similar for both cases, assumed that you call setupUi(this) or ui.setupUi(this) in the constructor of MyWidget

setupUi(QWidget* p) registers every widget of the UI as children of QWidget p, so you can easily access them by calling the children() function of p:

this->children(); //"this" refers to an object of MyWidget
0

精彩评论

暂无评论...
验证码 换一张
取 消