Important: Please read the Qt Code of Conduct -

Qt designer reading xml(.ui) file implementation

  • Hi,

    I have a requirement where i need to read an xml file which specifies the layout and position of the widgets in a Form/QMainWindow.
    Since Qt designer also works in the same way i.e reading from the xml structure in .ui file and loading it to the frame/widget.

    Where can i find the above implementation I checked "QUiLoader.cpp": but could not understand much.

    Thanks in advance.

    Note: With my own implementation I am able to read the xml file and load the widget to the form for single Layouts like QGridLayout , QFormLayout etc. I need an idea for the implementation of multiple layouts like a QGridLayout has a QHboxLayout etc.

  • I don't know what your real question is here. You could implement your own scheme of course, but why would you? [[doc:QUiLoader]] can do it for you, based on standard .ui files that you already own a complete editor for: QtDesigner/QtCreator. It seems to me that it is harder to create your own system, than to spend the effort to learn about using QUiLoader by reading its docs and doing some experiments.

  • Thanks Andre,

    Here the xml file consists of my own custom widgets. for eg:-


    @<?xml version='1.0' encoding='UTF-8'?>
    <Interface type="ConfigFrame">
    <Attribute name="WindowsTitle" value="Some Values For Parent Widget"/>
    <Attribute name="HeaderTitle" value="Dummy Screen"/>
    <Layout type="Grid" name="mainLayout">
    <Component type="Frame" name="frameTop">
    <Position row="0" col="0" rowSpan="1" colSpan="3"/>
    <Layout type="Grid" name ="upperLayout">
    <Layout type="Horizontal" name="hBox" stretch="80">
    <Position row="0" col="2" rowSpan="1" colSpan="1"/>
    <Component type="Label" name="labelUser">
    <Text alignment="TopCenter" textNo="100">User# </Text>
    <Component type="LineEdit" name="lineEditUser">
    <Text> 1 </Text>
    <Component type ="Label" name="labelFullName" >
    <Position row="1" col="1" rowSpan="1" colSpan="1" />
    <Text alignment="TopCenter" textNo="101"> User Login </Text>
    <Component type ="LineEdit" name="lineEditFullName" >
    <Position row="1" col="2" rowSpan="1" colSpan="2" />
    <Text> Test </Text>

    So the requirement is that at the runtime I am going to read the xml file and add the same to a Form. For the custom widget there are other attributes/properties as well. So for the implementation I was thinking to get an idea how the QUiLoader class works ?

    Thanks again.

  • You're still not asking a question.

  • Sorry I might not be clear with my question. I want to know how the QUiLoader reads the xml file(.ui) and loads the widgets to the form i.e I want to generate a panel/frame thats contain the widgets specified in the xml file at the particular position based on the layouts. Then this panel/frame is added to the main module/application/frame.

    The steps that i follow are.

    1. Reading the xml file using QXmlStreamReader.
    2. Storing the components/widgets to a container.
    3. Storing the attributes of the components/widget to another container.
    4. Then based on the layout , adding the component/widgets to the frame.

    Problem is to handle multiple layouts. Also i want to know if this is the correct approach or not ?

Log in to reply