Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Signals and slots in xml coding



  • I have been playing with Qt for some months now. I am teaching myself through coding and recreating code in various versions; QML, XML, C++, Gui.

    This approach is giving me a lot of insight.
    But I am stuck, The code below is mainly to do it all in xml. But I can't get my signals and slots to work. Everything looks fine to me and I am thinking I have missed something.

    @

    <ui version="4.0">
    <class>enTry1</class>
    <widget class="QMainWindow" name="enTry1">
    <property name="geometry" >
    <rect>
    <x>0</x>
    <y>0</y>
    <width>500</width>
    <height>200</height>
    </rect>
    </property>
    <property name="windowTitle">
    <string>All xml signals and slots example</string>
    </property>
    <widget class="QWidget" name="centralWidget">
    <widget class="QPushButton" name="pushButton">
    <property name="geometry">
    <rect>
    <x>70</x>
    <y>75</y>
    <width>75</width>
    <height>23</height>
    </rect>
    </property>
    <property name="text">
    <string>Pushbutton</string>
    </property>
    </widget>
    <widget class="QPushButton" name="pushButton_2">
    <property name="geometry">
    <rect>
    <x>70</x>
    <y>125</y>
    <width>75</width>
    <height>23</height>
    </rect>
    </property>
    <property name="text">
    <string>Pushbutton_2</string>
    </property>
    </widget>
    <widget class="QLabel" name="label">
    <property name="geometry">
    <rect>
    <x>80</x>
    <y>40</y>
    <width>46</width>
    <height>13</height>
    </rect>
    </property>
    <property name="text">
    <string>TextLabel</string>
    </property>
    </widget>
    </widget>

        <widget class="QMenuBar" name="menuBar">
            <property name="geometry">
                <rect>
                    <x>0</x>
                    <y>0</y>
                    <width>400</width>
                    <height>21</height>
                </rect>
            </property>
        </widget>
        <widget class="QToolBar" name="mainToolBar">
            <attribute name="toolBarArea">
                <enum>TopToolBarArea</enum>
            </attribute>
            <attribute name="toolBarBreak">
                <bool>false</bool>
            </attribute>
        </widget>
        <widget class="QStatusBar" name="statusBar" />
    
    </widget>
    
    <layoutDefault spacing="6" margin="11" />
    <resources/>
    <connections>
        <connection>
            <sender>pushButton</sender>
            <signal>clicked()</signal>
            <receiver>enTry1</receiver>
            <slot>button1pressed()</slot>
            <hints>
                <hint type="sourcelabel">
                    <x>113</x>
                    <y>138</y>
                </hint>
                <hint type="destinationlabel">
                    <x>207</x>
                    <y>136</y>
                </hint>
            </hints>
        </connection>
        <connection>
            <sender>pushButton_2</sender>
            <signal>clicked()</signal>
            <receiver>enTry1</receiver>
            <slot>button2pressed()</slot>
            <hints>
                <hint type="sourcelabel">
                    <x>127</x>
                    <y>199</y>
                </hint>
                <hint type="destinationlabel">
                    <x>206</x>
                    <y>183</y>
                </hint>
            </hints>
        </connection>
    </connections>
    <slots>
        <slot>button1pressed()</slot>
        <slot>button2pressed()</slot>
    </slots>
    

    </ui>
    @

    To give more info the code runs just nothing when buttons are pressed. The errors say;

    QObject::connect: No such slot QLabel::button1pressed() in ./ui_entry1.h:69
    QObject::connect: (sender name: 'pushButton')
    QObject::connect: (receiver name: 'label')
    QObject::connect: No such slot enTry1::button2pressed() in ./ui_entry1.h:70
    QObject::connect: (sender name: 'pushButton_2')
    QObject::connect: (receiver name: 'enTry1')

    Any suggestions....??



  • Hi,

    [quote author="ebonygeek" date="1374271313"]
    QObject::connect: No such slot QLabel::button1pressed() in ./ui_entry1.h:69
    QObject::connect: (sender name: ‘pushButton’)
    QObject::connect: (receiver name: ‘label’)
    [/quote]

    I don't know how did you create the connection, but as you can see in the documentation of QLabel, there is no slot called button1pressed() in QLabel.

    http://qt-project.org/doc/qt-5.1/qtwidgets/qlabel.html

    [quote author="ebonygeek" date="1374271313"]
    QObject::connect: No such slot enTry1::button2pressed() in ./ui_entry1.h:70
    QObject::connect: (sender name: ‘pushButton_2’)
    QObject::connect: (receiver name: ‘enTry1’)
    [/quote]

    enTry1 is object name of your custom class MainWindow. You should define a slot called button2pressed() in the class if you want to make this connection works.


Log in to reply