qlabel的mouseReleaseEvent()无法正常工作

时间:2012-05-28 16:52:03

标签: qt qlabel

我有一个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();
}

似乎没有什么错,但它不起作用。

谢谢!

1 个答案:

答案 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。