我有一个qlabel小部件,我重写了mouseReleaseEvent()它的工作原理但不正确它只接受了小部件高度的一半中的mouseReleaseEvent,就像在100%高度的范围内一样,它的工作效率只有40%我的意思是不是覆盖整个qlabels的方形(100x100)区域。
这是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 :(得分: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。