c++ - 正确的点击事件

标签 c++ qt user-interface window borderless

我有像这样的按钮的无边框形式 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/

相关文章:

c++ - 我负责释放/删除stringstream.str()返回的字符串吗?

c++ - 在执行时在布局中添加自定义小部件

vb.net - 委托(delegate)如何解决跨线程问题?

user-interface - 更新 : how to start downloaded installer unattended with progress dialog?

C++:不能使用简单的指针?

c++ - gcc 4之后C++中的线程安全单例?

c++ - 如何在opencv2.1中使用opencv2.3头文件

qt - QListView 带有用于查看文件系统的复选框

c++ - 未定义的函数引用

python - 每次在 tkinter 中打开新窗口时如何关闭旧窗口