2013-02-25 71 views
1

我想實現類似於Ribbon UI中找到MS Office 2007。 我正在使用QPushbutton以及QStacked Widget。當按下QPushbutton對應widgetStacked Widget被顯示。我想以這樣的方式執行,即當按下PushButton時,除非按下其他QPushButton,否則我們不應再次按下它。 因此對於clicked()SLOT我的QPushButton我在我的第一行中打電話給:button->setDown(true);。 根據文檔:QPushbutton中可能存在的錯誤?

如果此屬性爲true,則該按鈕被按下。如果將此屬性設置爲 ,則不會發出按()和點擊()的信號 。

所以當我在運行時單擊它時,按鈕顯示爲按下。那很好!然而,SIGNAL仍然發射,即發射pressed() & clicked()。 我曾嘗試使用SIGNAL的& SLOT的不同組合的相同屬性。然而它也是一樣的。我正在使用Qt 4.8.1。 這裏怎麼回事? 謝謝。

+1

聽起來像是你居然要禁用的控制? – paulm 2013-02-25 12:43:49

+0

如果它必須保持下來,它應該也可以檢查(或者你只是有一個按下按鈕的視覺外觀...) – 2013-02-25 12:45:19

+0

@Adriano我想要的視覺外觀被按下是的。我也希望它不應該按照文件發出上述信號。關於checkable,我認爲QPushButton沒有這個屬性?糾正我,如果我錯了... – 2013-02-25 12:48:05

回答

3

如果您想將按鈕視覺外觀設置爲,請按您可以使用setDown()函數。該文檔不是很清楚,但:

如果此屬性爲true,則按下按鈕。如果將此屬性設置爲true,則不會發出按()和clicked()信號。

這並不意味着,雖然按鈕被按下的信號將不發射,但他們將不發射當你調用setDown()(畢竟按鈕被啓用和第二點擊可以簡單地切換其狀態)。

你可以做的是檢查你的處理器裏面的按鈕是否被按下(isDown()clicked()。作爲替代方法,您可以將按鈕更改爲可檢查(使用setCheckable())):第二次單擊按鈕將「關閉」它(如果這是您需要的行爲)。

+0

不確定你的意思是 「這並不意味着按下按鈕時不會發出這些信號,而是在您調用setDown()時它們不會被髮射(所有按鈕都啓用後,第二次點擊可能會簡單地切換其狀態)。「 當第一次按下按鈕時,顯然必須發出信號。但是之後每次按都不應該導致SIGNAL,因爲當第一次按下按鈕時,我在SLOT中調用setDown()。 – 2013-02-25 13:58:11

+0

對不起我的英文不好,我會盡力解釋一下:設想文檔不會這麼說。好?那麼,現在調用setDown(true)。我們可能會期望至少按下按鈕()的信號,因爲按鈕改變了它的狀態。現在把這句話放回文檔中。你調用setDown(true)但按下()不會被髮射(**用於那個調用**)。 – 2013-02-25 14:02:20

+1

這意味着即使setDown()將改變按鈕的狀態,也不會因調用setDown()**而發出**相應的信號。這並不意味着它會禁用這些信號。 – 2013-02-25 14:03:50

0

設置所有的按鈕可檢查並閱讀了關於

http://qt-project.org/doc/qt-4.8/qbuttongroup.html

+0

非常感謝!!!! 這正是我想要製作Ribon UI的需求。 – 2013-02-26 05:24:49

+0

請upvote它,如果你喜歡的解決方案:) – cppguy 2013-02-26 17:53:35

+0

我已經做到了! 也許有人投下了你的答案:) 我能做些什麼? 也許你可以問問下列投票人的答案... – 2013-02-27 05:23:10

相關問題