2010-12-02 32 views
6

如何在QWidget中實現mouseEnter和mouseLeave事件?如何在QWidget中實現mouseEnter和mouseLeave事件?

如果的MouseEnter給QWidget然後我需要設置背景顏色分爲灰色, 如果從QWidget的所述鼠標離開然後我需要設置的背景顏色是白色

我試圖

void enterEvent(QEvent *); 
void leaveEvent(QEvent *); 

在輸入內部&事件我正在使用bool varibale設置爲true & false。我打電話給QPainter事件更新();

下面的代碼:

void Test::enterEvent(QEvent *) 
{ 
    _mouseMove=true; 
    update(); 

} 

void Test::leaveEvent(QEvent *) 
{ 
    _mouseMove=false; 
    update(); 

} 

void Test::paintEvent(QPaintEvent *) 
{ 
    QPainter painter; 
    painter.begin(&m_targetImage); 
    painter.setRenderHint(QPainter::Antialiasing); 

     if(_mouseMove){ 
      painter.fillRect(QRect(0,0,width(),height()),Qt::white);} 
     else{ 
      painter.fillRect(QRect(0,0,width(),height()),Qt::gray);} 

    painter.end(); 

    QPainter p; 
    p.begin(this); 
    p.drawImage(0, 0, m_targetImage); 
    p.end(); 
} 

我收到以下錯誤,當我在QWidget的

QPainter::begin: Paint device returned engine == 0, type: 3 
QPainter::setRenderHint: Painter must be active to set rendering hints 
QPainter::end: Painter not active, aborted 

移動鼠標,請幫我解決這個問題。如果有任何人有示例代碼,請提供給我......

+0

你也可以聽懸停事件,它們自己執行update()。 Qt樣式表還允許根據懸停狀態進行不同的設置。 – 2010-12-02 12:21:26

回答

2

首先,我將使用一個成員來保存當前背景顏色,而不是一個布爾值。這將簡化的paintEvent代碼:

painter.fillRect(QRect(...), m_backColor); 

我猜的錯誤出現第QPainter的。你爲什麼使用QPainter填充圖像?如果var是一個QImage,您可以通過示例使用fill function,並調用drawImage。您有與QPixmap相同的功能。

4

使用styles

大多數插件支持:hover僞狀態,爲您的插件的backgroundColor屬性的風格

test->setStyleSheet(":hover {background-color: #dddddd;}"); 

或做它通過設計,這更加方便,如果你需要做的自定義繪製做。但你不需要做任何只是改變基本小部件外觀的東西。

0

另一種方法: 使用QStyleOption。

QStyleOption sopt; 
sopt.initFrom(this); 
if(sopt.state & QStyle::State_MouseOver) 
{ 
    painter.fillRect(QRect(...), m_colorHover); 
} 
else 
{ 
    painter.fillRect(QRect(...), m_colorNotHover); 
} 

不需要使用額外的變量,像_mouseMove

2

QWidgets還支持underMouse方法,它可以代替StyleOption或屬性的解決方案:

if(underMouse()){ 
    painter.fillRect(QRect(0,0,width(),height()),Qt::white);} 
else{ 
    painter.fillRect(QRect(0,0,width(),height()),Qt::gray);} 
相關問題