AC
June 6, 2020, 12:54 p.m.

Qt/C++ Определение положения курсора над действие(кнопкой) в QToolBar

QToolBar, Qt

Доброго дня.
Возник вопрос - как можно определить что курсор находится над определенным действием(кнопкой) в qtoolbar ?

mainwindow.cpp

  1. MainWindow::MainWindow(QWidget *parent)
  2. : QMainWindow(parent)
  3. , ui(new Ui::MainWindow)
  4. {
  5. ui->setupUi(this);
  6.  
  7. // ...
  8. if (globals::settings_UseNoteApp){
  9.  
  10. // для кнопок которые расположенны на форме
  11. //ui->btnAddDoctor->setMouseTracking(true);
  12. //ui->btnAddDoctor->installEventFilter(this);
  13.  
  14. // для mainToolBar
  15. ui->mainToolBar->setMouseTracking(true);
  16. ui->mainToolBar->installEventFilter(this);
  17. }
  18. }
  19.  
  20. bool MainWindow::eventFilter(QObject *obj, QEvent *event)
  21. {
  22. // if (obj == ui->btnAddDoctor){
  23. // if (ev->type() == QEvent::Enter){ // над кнопкой
  24. // // ...
  25. // } else if (ev->type() == QEvent::Leave) // вне проекции кнопки
  26. // // ...
  27. // }
  28. // }
  29.  
  30. if (obj == ui->mainToolBar){
  31. // QAction *listUser = static_cast<QAction*>(ui->actionViewListUsers);
  32. // QAction *listUser = static_cast<QAction*>(ui->actionViewListDoctors);
  33. // int px = ui->mainToolBar->actionGeometry(listUser).x();
  34. // int py = ui->mainToolBar->actionGeometry(listUser).y();
  35. // ... но это не то что надо ...
  36. }
  37. return false;
  38. }
2

Do you like it? Share on social networks!

5
Evgenii Legotckoi
  • June 7, 2020, 11:23 p.m.

Добрый день.
Проверяйте event на тип события.ю например на движение курсора.
Также есть ещё несколько типов событий мыши. Смотрите документацию

  1. if (event->type() == QEvent::MouseMove)
  2. {
  3.  
  4. }
    AC
    • June 10, 2020, 12:20 a.m.
    • (edited)

    Спасибо за наводку, но никак не могу разобраться.
    Пытаюсь отследить движение курсора...

    1. if (obj == ui->mainToolBar)
    2. {
    3. if (event->type() == QEvent::MouseMove)
    4. {
    5. QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    6. QPoint pos = mouseEvent->pos();
    7. statusBar()->showMessage(QString("Mouse move (%1,%2)").arg(pos.x()).arg(pos.y()));
    8. }
    9. }

    ... получаю данные о курсоре при движении в проекции mainToolBar , но возникает проблема - как только курсор находится над действием(кнопкой) QToolBar данные(x,y) не считываются.
    Ну и возникает вопрос как определить что курсор находится над действием(кнопкой) QToolBar ?
    Свойство setMouseTracking нельзя установить QAction ( "ui->actionViewListUsers" ). Как быть в данной ситуации ?

    Необходимо реализовать(пример):
    - при наведение курсора на "ui->actionViewListUsers" выводить уведомление или подсказку в стиле popUp
    - при наведение курсора на "ui->actionViewListDoctors" выводить информ.сообщение через QMessageBox

      Evgenii Legotckoi
      • June 10, 2020, 11:30 a.m.
      • (edited)
      • The answer was marked as a solution.

      Наследуйтесь от QToolBar и переопределите методы mouse событий.
      Проще будет заменить QToolBar на свой, чем впихивать сторонний фильтер из окна.

        AC
        • June 10, 2020, 11:51 p.m.

        Спасибо за наводку и за совет.
        В итоге:

        1. QToolBar mainToolBar = new QToolBar("Main Toolbar");
        2. QToolButton *btn = new QToolButton(this);
        3. btn->setText("Button test");
        4. btn->setIcon(QIcon(":rec/img/doctor_x32.png"));
        5. btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
        6. btn->setCursor(Qt::ArrowCursor);
        7. btn->setMouseTracking(true); // то что нужно !!!
        8. btn->installEventFilter(this); // то что нужно !!!
        9. mainToolBar->addWidget(btn);
        10.  
        11. addToolBar(mainToolBar);
          Evgenii Legotckoi
          • June 11, 2020, 1:30 p.m.

          Пожалуйста... хотя это не наследование от класса, но да ладно, нашли решение и хорошо.

            Comments

            Only authorized users can post comments.
            Please, Log in or Sign up
            • Last comments
            • IscanderChe
              April 12, 2025, 5:12 p.m.
              Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
            • AK
              April 1, 2025, 11:41 a.m.
              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
            • Evgenii Legotckoi
              March 9, 2025, 9:02 p.m.
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              March 9, 2025, 4:14 p.m.
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
            • ИМ
              Nov. 22, 2024, 9:51 p.m.
              Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…