如何使用文本超过图像与点击事件在QT
How to use text over image with click event in QT
我是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
}
};
相关文章:
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 具有Qt事件循环的可移植通用共享库设置
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件
- Qt:事件过滤器在显示 QCompleter 时不接收按键
- Qt 中的去抖动事件过滤器
- QT 事件过滤器 mouseEvent->pos().x() 始终为零,但 mouseEvent->pos().y() 工作正常
- Qt应用程序不响应鼠标和键盘事件
- Qt将鼠标移动事件转移到新窗口
- 如何从qml Keys.oPressed调用qt keyPressEvent(QKeyEvent*事件)
- Qt-如何在Qt3DWindow上获取鼠标事件
- 如何使用 QT 和 C++ 侦听 mysql 数据库中的触发事件?
- Qt:如何防止为平板电脑事件生成鼠标事件
- 检测键按事件 - Qt C++上的插入符号 (^) 键
- 如何等待密钥事件,直到进程在 QT 中完成
- Qt 键按事件处理程序仅在按下 ctrl、alt 或 shift 键时做出反应
- 如何从Qt绑定到在Windows 7 / 8 / 10中连接/断开USB设备事件
- 覆盖Qt的鼠标按下事件中断移动事件参数
- Qt 如何使用鼠标移动事件移动视图
- 是否可以在QT GUI应用程序中处理事件时播放加载动画指示器?
- 映射键按事件qt