2016-02-27 40 views
0

我有一個按鈕,無國界的形式就像這個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(); 
    } 
} 

回答

1

如何檢查用戶執行的點擊(不拖)?

它應該更容易。不要從您的按鈕中竊取活動。這種方法是從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(); 
} 
+0

如果我不喜歡這一點,並試圖拖動按下按鈕,形式會動搖在鏈接的問題 –

+0

你說的問題是與單擊。這個例子更多的是用戶對UI的期望。點擊按鈕,而不是拖動。 – AlexanderVX

0

的simpliest方式禁止拖動點擊buttonbool

LoginForm::LoginForm(QWidget *parent) 
    : QWidget(parent) 
{ 
    ... 
    m_isDragButton = false; 
} 

LoginForm::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (event->type() == QMouseEvent::MouseButtonPress) 
    { 
     QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); 
     if (obj == ui.loginButton) 
      m_isDragButton = 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 (!m_isDragButton) 
     if (event->buttons() & Qt::LeftButton) 
     { 
      QPoint coord = event->globalPos() - m_dragPosition; 
      move(coord); 
      event->accept(); 
     } 
} 

void LoginForm::mouseReleaseEvent(QMouseEvent *event) 
{ 
    m_isDragButton = false; 
    m_dragPosition = QPoint(); 
    event->accept(); 
}