2012-05-28 46 views
0

我有一個qlabel小部件,我重寫了mouseReleaseEvent()它的工作原理,但不正確它只接受mouseReleaseEvent在小部件高度的一半,就像100%作品只有40%,我的意思是它不包括整個qlabels的正方形(100x100)區域。qlabel的mouseReleaseEvent()不能正常工作

這是Main.cpp的

QLabel sample(&Parent);//parent is just QWidget object 
sample.resize(89,89); 
sample.move((Parent.width()/2 - sample.width()/2), (Parent.height()/2 - sample.height()/2)); 
sample.setStyleSheet("QLabel{background-color:red;}"); 

label mylabel(&Disc); 
sample.setMouseTracking(TRUE); 

這是LABEL.CPP

void label::mouseReleaseEvent(QMouseEvent *event) 
{ 
    QMessageBox msgBox; 
    msgBox.setText("Clicked()"); 
    msgBox.exec(); 
} 

似乎沒有太錯,但它不工作。

謝謝!

+0

忘了提及我也試過mouseMoveEvent(),mousePressEvent()..等等,但同樣的事情發生。不要從整個Q​​Label的正方形區域的鼠標輸入。 – wenn32

+0

請你澄清一下情況嗎? MWE會比碎片更好。 QLabel或標籤問題在哪裏?代碼中不清楚這部分內容。你用'move()'移動QLabel,佈局部分在哪裏? –

回答

4

問題的一部分是你正在創建一個「QLabel」而不是「標籤」。所以當然,QLabel在鼠標釋放時不會做任何事情。鼠標釋放工作完全正常,我在子類:

#include <QtGui> 

class Label : public QLabel 
{ 
protected: 
    void mouseReleaseEvent(QMouseEvent *) 
    { 
     qDebug() << "released"; 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    Label label; 
    label.setText("Hello"); 

    label.show(); 
    return app.exec(); 
} 

它看起來像你的標籤(不是QLabel,但子類)可能落後別的東西來顯示。如果是這樣的話,你應該使用QLayout。