我有像这样的按钮的无边框形式 question
问题是我不能点击按钮。仅当我执行双击而不改变按钮上的位置时它才有效。如何检查我执行点击(而不是拖动)的用户?
代码如下:
bool LoginForm::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QMouseEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if (obj == ui.loginButton)
{
QPoint absPos = ui.loginButton->mapToParent(QPoint(0, 0));
m_dragPosition = (mouseEvent->pos() + absPos);
return true;
}
}
return false;
}
void LoginForm::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
m_dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}
void LoginForm::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton)
{
QPoint coord = event->globalPos() - m_dragPosition;
move(coord);
event->accept();
}
}
最佳答案
How to check that user is performing click (not drag)?
它应该更容易。不要从您的按钮中窃取事件。这种方法是从 Qt 示例中借用的:Music Player .参见 musicplayer.cpp了解详情。
void LoginForm::mousePressEvent(QMouseEvent *event)
{
m_dragPosition = event->globalPos() - pos();
event->accept();
}
void LoginForm::mouseMoveEvent(QMouseEvent *event)
{
move(event->globalPos() - m_dragPosition);
event->accept();
}
void LoginForm::mouseReleaseEvent(QMouseEvent *event)
{
m_dragPosition = QPoint();
event->accept();
}
关于c++ - 正确的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35672041/