2013-07-19 261 views
0

我一直在玩Qt幾個月了。我通過編碼和重新創建各種版本的代碼來教我自己; QML,XML,C++,Gui。Qt信號和插槽xml

這種方法給了我很多見解。 但我被卡住了,下面的代碼主要是在xml中完成的。但我無法讓我的信號和插槽工作。一切看起來都很好,我想我錯過了一些東西。

<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> 

要給出更多信息,當按下按鈕時,代碼只運行任何內容。錯誤說,

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’) 

任何建議......。

回答

1

http://qt-project.org/doc/qt-5.0/qtdesigner/designer-using-a-ui-file.html

http://qt-project.org/doc/qt-4.8/examples-designer.html

的UI文件也知道作爲一個:

Qt設計形式

您正在尋找在通常情況下,XML是使用Qt Designer生成。我會遵循使用Designer的教程而不是編輯生成的文件。

我還沒有看到xml的例子或在qt文檔中編輯xml的含義。

說了這麼多,要弄清楚你的當前問題的最好辦法,就是打開Qt設計,讓你的按鈕和標籤和您的連接在你的QMainWindow,併產生你的UI文件後,將其比作一個你試圖手寫的地方。

希望有所幫助。

+0

我會試試看,謝謝你的回覆。我很確定我確實知道ui自動生成代碼。那時我覺得那是令人沮喪的。從那以後,我一直把它作爲一個未解決的問題。我很抱歉遲到的回覆,並非常感謝你的幫助。 –