簡體   English   中英

如何通過拖動鼠標 QT 來檢查按鈕? 鼠標移動事件

[英]How to check pushButtons with draging the mouse QT ? MouseMoveEvent

我有 5 個按鈕 (pushButton_i) i = 1, 2, 3, 4, 5。我想要做的是拖動鼠標(按下按鈕),然后在“是”上設置選中按鈕的 setText,否則在“否”上。 我嘗試了以下代碼,但結果是:當我按下鼠標按鈕然后稍微移動它時,所有按鈕的文本都設置為“否”。 這是我的代碼:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include<QEvent>
#include <QMouseEvent>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    QString key;
    for (int i=1;i<=5;i++){
        key = QString("pushButton_%1").arg(i);
        QPushButton *button = ui->centralwidget->findChild<QPushButton*>(key);
        QRect widgetRect = button->geometry();
        widgetRect.moveTopLeft(button->parentWidget()->mapToGlobal(widgetRect.topLeft()));
        if (button->rect().contains(event->pos())) button->setText("Yes");
        else button->setText("No");
}

}


有人可以向我解釋發生了什么嗎?

從文檔:

QMouseEvent::pos()報告鼠標光標的位置,相對於這個小部件

但是,您可以通過將其置於 (0, 0) 點來更改按鈕的位置。 我不知道你為什么要重新定位按鈕。

試試這個:

   void ButtonDrag::mouseMoveEvent(QMouseEvent *event)
    {
      QString key;
      for (int i = 1; i <= 5; i++)
      {
        key = QString("pushButton_%1").arg(i);
        QPushButton *button = ui.centralWidget->findChild<QPushButton*>(key);  
        button->setText("No");
      }

      QWidget* child = ui.centralWidget->childAt(event->pos());
      QPushButton* affectedBtn = dynamic_cast<QPushButton*>(child);
      if (affectedBtn)
        affectedBtn->setText("Yes");
    }

問題是,我不知道如何在沒有沮喪的情況下做到這一點。 但至少它有效 xD。 我將所有按鈕的文本設置為“否”並通過 ui.centralWidget->childAt(event->pos()) 獲取受影響的Btn(如果有),我必須向下轉換才能使用 setText 方法

void MainWindow::mouseMoveEvent(QMouseEvent *event)
   {
     QString key;
     for (int i = 1; i <= 5; i++)
     {
       key = QString("pushButton_%1").arg(i);
       QPushButton *button = ui->centralwidget->findChild<QPushButton*>(key);
       button->setCheckable(true);

     }

     QWidget* child = ui->centralwidget->childAt(event->pos());
     QPushButton* affectedBtn = dynamic_cast<QPushButton*>(child);

     if (affectedBtn)
       affectedBtn->setChecked(true);
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM