我有一个QPushButton,其图像有两个区域,我想在点击时以不同的方式处理。由于图像上的定位,我无法为这两个图像使用单独的按钮。
我想要做的是,在我处理点击的插槽中,检查点击的坐标以确定点击了哪个区域。
有没有办法访问它?
答案 0 :(得分:3)
这是首先想到的。它应该有效,尽管可能有一种更简单的方法:
QPushButton
。mousePressEvent
和mouseReleaseEvent
),并在调用基类实现之前,使用setProperty
在鼠标单击位置设置对象中的属性。 (该位置可从事件参数中获得。)sender()
获取按钮,然后使用property()
读取属性。 如果您不需要将对象视为基类(QPushButton*
),则可以创建一个包含鼠标事件的新信号并将其附加到您的插槽中。那你根本不需要这个属性。
答案 1 :(得分:1)
您可以使用QCursor :: pos()获取当前鼠标位置,该位置返回全局屏幕坐标中光标(热点)的位置。
现在屏幕坐标不易使用,可能不是你想要的。幸运的是,有一种方法可以将屏幕坐标转换为相对于小部件的坐标。
QPoint _Position = _Button->mapFromGlobal(QCursor::pos());
这应该告诉您用户点击鼠标时按钮的位置。你可以从那里拿走它。
答案 2 :(得分:0)
基于@Liz的简单机制,这就是我所做的;这是在slot()上调用的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);
}
}