Intruder
23 марта 2020 г. 17:00

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

QTableView, focusInEvent, focusOutEvent

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

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

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

2

Вам это нравится? Поделитесь в социальных сетях!

4
ДК
  • 23 марта 2020 г. 17:49
  • (ред.)

Привет. Переопределить во вьюхе 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
    • 23 марта 2020 г. 19:08

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

      Intruder
      • 23 марта 2020 г. 19:12

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

        ДК
        • 23 марта 2020 г. 19:15
        • (ред.)

        а. понял. Ну, не уверен на 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

          Комментарии

          Только авторизованные пользователи могут публиковать комментарии.
          Пожалуйста, авторизуйтесь или зарегистрируйтесь