2016-05-31 42 views

回答

3

您必須設置一個覆蓋styleHint()的自定義QProxyStyle並返回您的首選值QStyle::SH_ToolTip_WakeUpDelay。下面的示例代碼。

class CustomStyle : public QProxyStyle 
{ 
    Q_OBJECT 
public: 
    ... 
    int styleHint(StyleHint hint, const QStyleOption *option = Q_NULLPTR, const QWidget *widget = Q_NULLPTR, QStyleHintReturn *returnData = Q_NULLPTR) const Q_DECL_OVERRIDE { 
     if (hint == SH_ToolTip_WakeUpDelay) 
      return someCustomValue; 
     else 
      return baseStyle()->styleHint(hint, option, widget, returnData); 
    } 
} 
+0

不幸的是只有在Qt 5.謝謝你。我很抱歉,我沒有在這個問題中說過,但我正在使用4.8.7。你知道這個版本的解決方案嗎? –

+0

恐怕不是。 = / –

1

顯然,使用內置的Qt工具提示是不可能的。在4.8 qapplication.cpp他們用神奇數字:

d->toolTipWakeUp.start(d->toolTipFallAsleep.isActive()?20:700, this); 

所以默認行爲是經過700毫秒顯示工具提示,並啓動2000毫秒下降,入睡定時器。如果我們將鼠標懸停在另一個窗口(窗口小部件)上並且睡眠計時器仍處於活動狀態,則延遲將減少到20毫秒,可能是假設第一個提示不是用戶想要的。

+0

哇,又一個Qt是一個糟糕的UI框架的原因。這是不可寬恕的。它甚至不尊重平臺設置,因爲這是非常可能的。輔助功能要求用戶能夠更改工具提示超時,並且應該在系統級而不是按應用程序進行配置。如果我在Windows上這樣做,Qt應用程序會高興地忽略它,使我的生活更加困難。 –

+0

@CodyGray不要討厭他們。 :) UI框架非常複雜。在4.8代碼中,實際上有一條評論說他們計劃爲Qt 5定製。也許他們沒有早點解決它,或者它從來沒有出現過。是的,我同意,默認應該來自全系統設置。 –

+0

我意識到他們很複雜。我寫了幾個。當然,這並不像Qt那麼全面,因爲它們還沒有被用於公共消費。但是,面對面向公衆的框架的第4版,許多不同的供應商使用,仍然不尊重平臺設置是不可原諒的。我有一個不考慮使用未使用本機用戶界面編寫的應用程序的通用政策。像這樣的事情是原因。 「跨平臺」引人入勝,直到你意識到它意味着你的應用程序在* all *平臺上基本上被打破了。哎呀。 –