2012-07-31 36 views
6

我有兩個自定義樣式的QPushButton按鈕。下面是Ok按鈕樣式表:QPushButton視覺問題

QPushButton 
{ 
    background-color:#9dce2c; 
    border-radius:7px; 
    border:1px solid #83c41a; 
    color:#ffffff; 
    font-size:15px; 
    font-weight:bold; 
    padding:4px 24px; 
    text-decoration:none; 
} 
QPushButton:pressed 
{ 
    border:2px solid black; 
} 

現在,這裏是什麼樣子:

Ok button

這是罰款。但是,如果單擊該按鈕(獲得焦點),它開始是這樣的:

Ok button focused

注意周圍的文字略有陰影矩形。看起來好像文本正在「被選中」。當按鈕失去焦點時,它再次開始看起來正常。我想這是因爲所選擇的控制得到強調這樣的:

enter image description here

不過,我想我的按鈕保持不變,無論無論是集中與否。有什麼辦法可以解決這個問題嗎?

+0

覆蓋paintEvent – Rolle 2012-07-31 06:47:27

回答

3

找到解決方案。原來是很簡單

該問題確實是由按鈕接收焦點造成的。我所需要做的就是將按鈕的focusPolicy屬性設置爲NoFocus。它可以在QtDesigner做到無論:

enter image description here

或代碼:

ui.okButton->setFocusPolicy(Qt::NoFocus);

它完成後,按鈕上的點擊就無法使其獲得焦點,和外觀不會改變。

+3

您可能會在行爲上稍有不同 - 當您專注於按鈕你可以通過Space按鍵來按下它,但這一切都取決於你需要的東西。就我個人而言,我一直喜歡鍵盤可以使用的圖形用戶界面,很糟糕,以至於開發人員現在忽略了這個特性:(。 – kolenda 2012-07-31 10:01:05

+0

@Kolenda,是,我意識到這一點,我在表單中有一個'QLineEdit',用戶將用它來輸入他的東西,我將在這個'QLineEdit'中跟蹤'Enter'命中,並在這種情況發生時強制按下按鈕 – SingerOfTheFall 2012-07-31 10:06:10

+0

@Kolenda,雖然這是一個很好的觀點,但是我覺得非常令人失望,因爲不能夠通過'enter'來完成填充。 – SingerOfTheFall 2012-07-31 10:07:03

0

我沒有嘗試,但我認爲你可以通過將QPushButton:hover設置爲與QPushButton相同的樣式來解決該問題。有一些默認樣式可以讓按鈕懸停在紅色上,你只需要找出它是哪一個(可能是hover)並覆蓋它。

+0

它在懸停時不會變紅。它在點擊後變得如此,直到點擊任何其他控件。 – SingerOfTheFall 2012-07-31 07:54:02

+0

@SingerOfTheFall,對,然後嘗試'QPushButton:focus'狀態。 – 2012-07-31 07:56:37

+0

剛剛嘗試過,沒有幫助=( – SingerOfTheFall 2012-07-31 08:01:28

3

這消除了橙色矩形:

QPushButton:focus { 
    outline: none; 
} 

PS:你應該儘量添加一些樣式到焦點狀態就像變了一個背景色,使這種狀態保持「可見」給用戶。