Intruder
March 23, 2020, 5 p.m.

Как получить фокус объекта QTableView(не строка или колонка) или как определить находится ли данный объект в фокусе?

QTableView, focusInEvent, focusOutEvent

Всем доброго времени суток!

Прошу помощи. Есть задачка, если QTableView теряет фокус (например, перехожу на другой QTableView), то кнопки на форме должны поменять свою доступность. В функциях нет подобного, точнее есть, но если я выбираю строку. Мне нужно, чтобы кнопки становились активными или нет по нажатию на самом элементе QTableView.
Поискав на просторах интернета ответа не нашел. Что касается объекта QTableView, я его создаю в дизайнере как и саму форму.

Буду рад помощи от сообщества!
Всем откликнувшимся заранее спасибо за ответ.

2

Do you like it? Share on social networks!

4
ДК
  • March 23, 2020, 5:49 p.m.
  • (edited)

Привет. Переопределить во вьюхе event(), которая отображает твои QTableView и сделать при этом евенте блок кнопок.

  1. bool event(QEvent *event)
  2. {
  3. if(event->type() == QEvent::?) {
  4. ui->button->setEnabled(false);
  5. return true;
  6. }
  7. else if(event->type() == QEvent::?) {
  8. ui->button->setEnabled(true);
  9. return true;
  10. }
  11. else
  12. return ОтЧегоВьюНаследовал::event(event);
  13. }

вот здесь список эвентов
PS: лучше использовать специализированный event(closeEvent(), focusInEvent(), focusOutEvent(), enterEvent(), keyPressEvent(), keyReleaseEvent(), leaveEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), mousePressEvent(), mouseReleaseEvent(), moveEvent(), paintEvent(), resizeEvent() и пр)

    Intruder
    • March 23, 2020, 7:08 p.m.

    Не совсем я понял Вашу подсказку. QTableView располагается в GroupBox, который в свою очередь располагается на вкладке QTabWidget.
    Может я как-то некорректно написал, но кликая в пустом месте на QTableView, предок у него tabWidget, я хочу отработать действие: если QTableView не является активным, тогда выполнять ряд действий. Сейчас этот ряд действий выполняется только тогда, когда я кликну на записи. Как переопределить именно для QTableView, а не для всего QDialog?

      Intruder
      • March 23, 2020, 7:12 p.m.

      Получается, что мне сначала нужно сделать класс myTableView, который будет наследоваться от QTableView, а в нем переопределить focusInEvent и focusOutEvent методы? Или есть более простой и понятный способ?

        ДК
        • March 23, 2020, 7:15 p.m.
        • (edited)

        а. понял. Ну, не уверен на 100%, но наверное можно сделать делегат для этого QTableView, в котором можно использовать уже

        1. protected:
        2. bool event(QEvent *event) Q_DECL_OVERRIDE;

        а внутри этого метода, то, что я выше описал. Вроде должно получиться!

        1. class TableViewDelegate : public QTableView
        2. {
        3. public:
        4. explicit TableViewDelegate(QWidget *parent = nullptr);
        5. protected:
        6. bool event(QEvent *event) Q_DECL_OVERRIDE;
        7. };

        а этот класс уже и использовать, как обычный QTableView
        Скорее всего вам понадобятся эти евенты: QEvent::Enter, QEvent::Leave

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          • Last comments
          • 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.
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
          • Evgenii Legotckoi
            Oct. 31, 2024, 11:37 p.m.
            Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup