访问QPushbutton点击槽中的坐标
Accessing the the coordinates in a QPushbutton clicked slot
我有一个带有图像的QPushButton,该图像有两个区域,我想在单击时以不同的方式处理。由于图像上的位置,我不能真正为两个图像使用单独的按钮。
我想做的是,在插槽中,我正在处理点击,让它检查点击的坐标,以确定哪个区域被点击。
有办法访问这个吗?
这是我首先想到的。它应该可以工作,尽管可能有一种更简单的方法:
- 创建自己的类,从
QPushButton
派生。 - 覆盖必要的鼠标事件(
mousePressEvent
和mouseReleaseEvent
),在调用基类实现之前,使用setProperty
在对象中设置鼠标单击位置的属性。(该位置可从事件参数获取) - 在处理事件的插槽中,使用
sender()
获取按钮,并使用property()
读取属性。
如果你不需要把你的对象当作基类(QPushButton*
),你可以创建一个包含鼠标事件的新信号,并将其附加到你的插槽。那么你就根本不需要这个属性了
您可以使用QCursor::pos()获得当前鼠标位置,该方法以全局屏幕坐标返回光标(热点)的位置。
现在屏幕坐标不容易使用,可能不是你想要的。幸运的是,有一种方法可以将屏幕坐标转换为相对于小部件的坐标。
QPoint _Position = _Button->mapFromGlobal(QCursor::pos());
这应该告诉你当用户点击时鼠标在按钮上的位置。你可以从这里开始。
基于@Liz的简单机制,我所做的是:这是在pressed()时调用的slot方法,但可以推广到其他情况。注意,使用pushButton->geometry()会给你已经在全局空间中的坐标,所以你不需要使用mapFromGlobal。
void MainWindow::handlePlanButtonPress()
{
int clickX = QCursor::pos().x();
int middle = m_buttonPlan->geometry().center().x();
if ( clickX < middle ) {
// left half of button was pressed
m_buttonPlan->setStyleSheet(sStyleLargeBlueLeft);
} else {
// right half of button was pressed
m_buttonPlan->setStyleSheet(sStyleLargeBlueRight);
}
}
相关文章:
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 比较两个节点坐标的最佳方法是什么?
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在C++中获取坐标?
- 如何将 x.y 坐标的值存储在不同的数组中
- 如何将鼠标坐标转换为"mm"
- 重心坐标并不总是有效(3d)
- 在单击 QPushButton 时调用带有参数的函数
- 尝试渲染像素坐标时,简单线条渲染失败
- 使用 GTK3 C++获取指针坐标
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 按下 QPushbutton 时将文本保存到文件
- 我想制作设置鼠标回调函数,以便在仍然按下鼠标左键时连续传递坐标
- 将鼠标悬停在图片框上时,如何显示带有 x-y 坐标的十字准线光标?
- 跳转到通过输入坐标定义的控制台屏幕位置
- 访问QPushbutton点击槽中的坐标