如何使用文本超过图像与点击事件在QT

How to use text over image with click event in QT

本文关键字:事件 QT 图像 何使用 文本      更新时间:2023-10-16

我是qt的新手,实际上我正在为我的项目制作图像。我需要显示的图像和文本也在图像与点击事件。我试过使用QLabel来显示图像以及文本,但它不支持单击事件。以下是我尝试过的:

mylabel->setText("Wh");
mylabel->setStyleSheet(QString("QLabel {background-image: url("sample.bmp");color : blue;}"));
mylabel->setGeometry(10,10,78,78);
mylabel->setFont(QFont("Arial", 12));
mylabel->setAlignment(Qt::AlignCenter);

我尝试过鼠标事件,它也工作得很好,但我不知道如何将事件位置与标签位置(xpos,ypos)进行比较。此外,如果我在运行时更改标签(setGeometry)的位置,则更难以比较标签位置(xpos,ypos)。我使用mouserrelease事件,比如

void SampleProject::mouseReleaseEvent(QMouseEvent* event)
{
    int Xpos=event->x();
    int Ypos=event->y();
    QString s = QString::number(Xpos);
    QString t = QString::number(Ypos);
    QMessageBox::question(this, s, t, QMessageBox::Yes|QMessageBox::No);
    emit clicked(event->pos());
}

我不确定我理解你问的是对的,但如果我这样做了,你应该子类QLabel并使用它的mouseReleaseEvent而不是全局的。如果您愿意,还可以为鼠标单击创建自己的信号:

class MyLabel : public QLabel
{
    Q_OBJECT
public:
    void mouseReleaseEvent(QMouseEvent *ev) override
    {
        setText("I have been clicked!");//you can change the text here directly on click
        QLabel::mouseReleaseEvent(ev);
        emit clicked();//or you can emit a signal, and use it elsewhere
    }
signals:
    void clicked();
};

如果您发射clicked信号,您可以很容易地在插槽中获得发射它的标签:

class LabelClickHandler : public QObject
{
    Q_OBJECT
public slots:
    void onLabelClicked()
    {
        MyLabel * label = dynamic_cast<MyLabel*>(sender());
        //do some stuff with the label
    }
};