IscanderChe
IscanderChe08 вересня 2023 р. 07:12

Кастомная QAbstractListModel и цвет фона, цвет текста и шрифт

Добрый день.

Пытаюсь поменять в модели цвет фона и текста, а так же шрифт и его размер. Получаю для всех трёх ролей - Qt::FontRole, Qt::BackgroundRole и Qt::ForegroundRole - однотипную ошибку. Что-то похожее у меня уже было когда-то давно, но я забыл, в чём там было дело.

QVariant MyAbstractListModel::data(const QModelIndex& index, int role) const
{
    if(!index.isValid())
        return QVariant();

    if(index.row() >= stringList.size())
        return QVariant();

    if(role == Qt::DisplayRole || role == Qt::EditRole)
    {
        QVariant value = QVariant::fromValue(stringList.at(index.row()));
        return value;
    }

    if(role == Qt::FontRole)
    {
        QFont font = QAbstractListModel::data(index, Qt::FontRole).value<QFont>();
        font.setFamily("Courier");
        font.setPointSize(10);
        return font;
    }

    if(role == Qt::BackgroundRole)
    {
        QBrush brush = QAbstractListModel::data(index, Qt::BackgroundRole).value<QBrush>();
        QColor color("#293134");
        brush.setColor(color);
        return brush;
    }

    if(role == Qt::ForegroundRole)
    {
        QBrush brush = QAbstractListModel::data(index, Qt::ForegroundRole).value<QBrush>();
        QColor color("#e0e2e4");
        brush.setColor(color);
        return brush;
    }

    return QVariant();
}
D:\workcopies\dev_qt2\SimpleCodeEditor\myabstractlistmodel.cpp:37: ошибка: undefined reference to `__imp__ZNK18QAbstractItemModel4dataERK11QModelIndexi'

P.S. Ругается, соот-но, на строки 17, 25, 33 по приведённому коду.

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

Вам це подобається? Поділіться в соціальних мережах!

5
Павел Дорофеев
  • 08 вересня 2023 р. 08:56
  • (відредаговано)

Я бы так сделал:
QVariant var = QAbstractListModel::data(index, Qt::ForegroundRole).value();

потом проверил var на тип - может в value ничего нет?

Обычно роли типа Qt::ForegroundRole надо реализовывать самому (прямо тут же в ::data), то сть создавать и отдавать QFont.

    IscanderChe
    • 08 вересня 2023 р. 09:38

    Обычно роли типа Qt::ForegroundRole надо реализовывать самому (прямо тут же в data)

    Поясните подробнее этот момент.

    Когда я наследовался от QSqlTableModel, там такой код нормально работал.

      Павел Дорофеев
      • 08 вересня 2023 р. 09:40

      Промотрите просто так : QVariant var = QAbstractListModel::data(index, Qt::ForegroundRole).value();
      что в var?

        Павел Дорофеев
        • 08 вересня 2023 р. 09:43
        • (відредаговано)

        Еще обратил внимание, что QAbstractListModel:: это же абстрактный класс. Похоже надо не абстрактный , а "реальный" типа QSqlTableModel .

          IscanderChe
          • 08 вересня 2023 р. 12:07

          Похоже надо не абстрактный , а "реальный" типа QSqlTableModel

          Да, но не совсем. Решилось с помощью стайлшитов и setFont.

          Спасибо за отлик!

            Коментарі

            Only authorized users can post comments.
            Please, Log in or Sign up
            Ua

            Qt - Тест 001. Сигналы и слоты

            • Результат:84бали,
            • Рейтинг балів4
            Ua

            Qt - Тест 001. Сигналы и слоты

            • Результат:42бали,
            • Рейтинг балів-8
            ОК

            Qt - Тест 001. Сигналы и слоты

            • Результат:47бали,
            • Рейтинг балів-6
            Останні коментарі
            ИМ
            Игорь Максимов22 листопада 2024 р. 11:51
            Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
            Evgenii Legotckoi
            Evgenii Legotckoi31 жовтня 2024 р. 14:37
            Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
            A
            ALO1ZE19 жовтня 2024 р. 08:19
            Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь Максимов05 жовтня 2024 р. 07:51
            Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas505 липня 2024 р. 11:02
            QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            Тепер обговоріть на форумі
            Дмитрий
            Дмитрий03 лютого 2025 р. 06:24
            Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
            NW
            Nayo Wai30 січня 2025 р. 09:22
            не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
            n
            nkly03 січня 2025 р. 02:52
            Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
            M
            Marsel16 серпня 2023 р. 14:26
            OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
            Evgenii Legotckoi
            Evgenii Legotckoi24 червня 2024 р. 15:11
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.

            Слідкуйте за нами в соціальних мережах