МА
Михаил АМаусым 1, 2020, 2:12 Т.Қ.

Qt- C++ QTableView подсветить строку

Задача- подсветить строку таблицы при наведении мыши.
Использую модель на базе примера 39- го урока.
Там при переопределенном методе Data я раскрашиваю строки тельняшкой.
Как делается подсветка строки при наведении мыши? Не нажатии, а наведении.
И делать это в TableView или в модели?

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

13
IscanderChe
  • Маусым 1, 2020, 2:33 Т.Қ.

Это делается при помощи делегата.

    Evgenii Legotckoi
    • Маусым 2, 2020, 3:03 Т.Ж.

    Вот в этом топике обсуждался делегат, сможете найти некоторые примеры кода и в общих чертаъ понять применение делегатов в таблицах.

    https://evileg.com/ru/forum/topic/962/

      МА
      • Маусым 2, 2020, 9:03 Т.Ж.

      А если без делегата?
      В переопределенном классе

      TableModel::TableModel(QObject *parent) : QSqlTableModel(parent)
      

      там же где и метод data переопределен вызвать раскраску отдельного ряда как?

      В основной форме при наведении мыши, вызывается метод

      void Customers::on_tableView_entered(const QModelIndex &index)
      {
      
      }
      

      в нем можно вызвать метод из модели нашего переопределенного класса.
      А в нем как раскрасить?

        Evgenii Legotckoi
        • Маусым 2, 2020, 9:16 Т.Ж.
        • (өңделген)

        Внутри модели НИКАК

        Модель данных является более низким уровнем абстракции, чем такие пользовательские действия, как наведение курсора мыши.
        Модель данных ничего не знает о том, что происходит во View в данном случае.
        За наведение курсора мыши и т.д. отвечает делегат. Именно делегату делегируется визуальное оформление ячеек. Максимум стилевое оформление ячеек.

        Да, модели данных в Qt имеют некоторый функционал ролей, а также его можно расширить, если добавлять пользовательские роли.
        Но данные роли оформления зависят от данных в модели, но никак не от пользователя, который тыкает мышью во View.

        А это void Customers::on_tableView_entered(const QModelIndex &index) называется костыль.
        Сделать можно, но это неправильно. Особенно, если у вас будет хитрая кастомизация цвета.

        Из простого, можете попробовать поиграться по StyleSheet, что впрочем тоже не самый лучший выбор для таблиц.
        Что-то типо такого может заработать.

        tableView->setStyleSheet("::item:hover { color:rgb(0,0,255) }");
        
          МА
          • Маусым 2, 2020, 9:19 Т.Ж.

          как итог- получилось. Насчет костыль- или нет- это есть в сигнале студии, значит допустимо.

          void Customers::on_tableView_entered(const QModelIndex &index)
          {
              model->highlightRow(index);
          }
          

          И ваш вариант переопределенный data с небольшими изменениями

          QVariant TableModel::data(const QModelIndex &idx, int role) const
          {
              if(role == Qt::BackgroundColorRole && idx.row() == hiRow)
                    return QColor(Qt::red);
          
              if (role == Qt::BackgroundColorRole)
              {
                  if (idx.row()%2 == 0){
                      return QColor(Qt::lightGray);
                  }
                  else {
                      return QColor(Qt::darkGray);
                  }
              }
              else if (role == Qt::DisplayRole)
              {
                  return QSqlTableModel::data(idx, role);
              }
          
              return QSqlTableModel::data(idx, role);
          }
          
          void TableModel::highlightRow(const QModelIndex &index)
          {
              hiRow = index.row();
              emit dataChanged(this->index(index.row(), 0), this->index(index.row(), 3));
          }
          

          Это работает!

            Evgenii Legotckoi
            • Маусым 2, 2020, 9:23 Т.Ж.

            Вы не поняли, это костыль с точки зрения архитектуры. В нормальном продакшене такое через ревью не пропускают. Но ваше право.

              МА
              • Маусым 2, 2020, 10:25 Т.Ж.

              Ок, соглашусь, что костыль.

              По делегату еще раз подсказать как тогда поступить лучше? По первой ссылке- не совсем то.

                Evgenii Legotckoi
                • Маусым 2, 2020, 10:27 Т.Ж.

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

                  МА
                  • Маусым 2, 2020, 10:40 Т.Ж.

                  Да, спасибо.

                    МА
                    • Маусым 3, 2020, 3:33 Т.Ж.

                    Забыли про меня вчера.

                      Evgenii Legotckoi
                      • Маусым 3, 2020, 3:34 Т.Ж.

                      Некогда было

                        Evgenii Legotckoi
                        • Маусым 3, 2020, 5:31 Т.Қ.
                        • Жауап шешім ретінде белгіленді.

                        Можете теперь посмотреть в этой статье Qt/C++ - Урок 091. Как написать кастомный делегат управляющий подсветкой строки в таблице

                          МА
                          • Маусым 4, 2020, 3:46 Т.Ж.

                          Спасибо.

                            Пікірлер

                            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                            Кіріңіз немесе Тіркеліңіз
                            OI
                            • Ora Iro
                            • Жел. 24, 2024, 6:38 Т.Ж.

                            C++ - Тест 001. Первая программа и типы данных

                            • Нәтиже:40ұпай,
                            • Бағалау ұпайлары-8
                            AD

                            C++ - Тест 004. Указатели, Массивы и Циклы

                            • Нәтиже:50ұпай,
                            • Бағалау ұпайлары-4
                            m
                            • molni99
                            • Қаз. 26, 2024, 1:37 Т.Ж.

                            C++ - Тест 004. Указатели, Массивы и Циклы

                            • Нәтиже:80ұпай,
                            • Бағалау ұпайлары4
                            Соңғы пікірлер
                            ИМ
                            Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                            Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                            Evgenii Legotckoi
                            Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                            Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                            A
                            ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                            Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                            ИМ
                            Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                            Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                            d
                            dblas5Шілде 5, 2024, 11:02 Т.Ж.
                            QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                            Енді форумда талқылаңыз
                            Evgenii Legotckoi
                            Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                            t
                            tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                            google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                            NSProject
                            NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                            Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                            9
                            9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
                            Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                            Бізді әлеуметтік желілерде бақылаңыз