2015-05-31 17 views
1

我有點stucked與創建基於QAction放在QToolBar
我有以下數據的XML文件下拉按鈕:下拉按鈕在QToolBar不斷變化的領域

<cfg> 
<fields> 
    <group name="First fields"> 
    <field>filed1</field> 
    <field>filed2</field> 
    <field>filed3</field> 
    </group> 
    <group name="Second fields"> 
    <field>filed4</field> 
    <field>filed5</field> 
    <field>filed6</field> 
     ... etc ... 
    </group> 
</fields> 
<button name="MyButton1" /> 
<button name="MyButton2 /> 
     ... etc ... 
</cfg> 

NB :我不知道會有多少場會,以及我不知道會有多少按鈕。

所以,首先,我解析下面的XML文件並提取所需的數據。

對於每個button我創建了自己的QAction並將其添加到現有的工具欄。
稍後,我爲每個按鈕創建QMenu,併爲每個組和字段填充QAction。我有QActionFirst fields,field1, field2,等等......
然後,對於每個button我使用方法,並在那裏添加創建的菜單。
如果我啓動我的應用程序,我可以在下拉菜單中看到工具欄中的按鈕,它們看起來像我期望的。

這裏的問題是我需要爲這些按鈕添加一些功能。

我想允許用戶檢查他們(我用setCheckable所有QActions)和取消。當用戶檢查具有組名稱的操作時,與該組相關的所有字段都將被檢查,等等。

由於我不知道啓動時會有多少按鈕和區域,因此很難處理信號和插槽。
它迫使我使用QMap存儲的創建QAction,當從該領域的信號被emited,然後使用find方法來尋找那些emited它的行動的所有地址,只對其執行必要採取行動。

問題是:是否有更好的方法來實現我的目標,或者我應該繼續使用這種方法?

回答

2

如果你不知道有多少項目將如何被創建,我建議你使用QSignalMapper(文檔here)。

首先您引用的每個項目與在QSignalMapper一個變量,然後您連接到信號變換器你想(從你的項目推出)的信號。最後,您將QSignalMapper連接到一個插槽,該插槽將接收參考變量。如果需要連接不同類型的信號,可以使用多個信號映射器。

您仍然必須將每件物品存放在某個地方,但我認爲這是要走的路。

+0

聽起來不錯。實際上,我做了同樣的事情,但我用'QMap'代替。 – tema