Как проверить кнопки с перетаскиванием мыши QT? MouseMoveEvent - PullRequest
0 голосов
/ 26 января 2020

У меня есть 5 кнопок (pushButton_i) i = 1, 2, 3, 4, 5. Я хочу перетащить мышь (кнопка нажата), а затем установить текст проверенных кнопок на «Да», в противном случае на « НЕТ». Я попробовал следующий код, но в результате: Когда я нажимаю кнопку мыши, а затем немного ее передвигаю, текст всех кнопок устанавливается на «НЕТ». Это мой код:

#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");
}

}


Может кто-нибудь объяснить мне, что происходит?

Ответы [ 3 ]

0 голосов
/ 26 января 2020

Попробуй с этим:

   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. Я установил текст всех кнопок на «Нет» и получаю disabledBtn (если он есть) с помощью ui.centralWidget-> childAt (event-> pos ()), который мне нужно уменьшить, чтобы использовать метод setText

0 голосов
/ 26 января 2020
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);
   }
0 голосов
/ 26 января 2020

Из документации:

QMouseEvent::pos() сообщает о положении курсора мыши относительно этого виджета

Однако вы меняете положение кнопки с помощью делая это в точке (0, 0). Я не знаю, почему вы переместили кнопку.

...