IscanderChe
IscanderChe8. September 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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

5
Павел Дорофеев
  • 8. September 2023 08:56
  • (bearbeitet)

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

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

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

    IscanderChe
    • 8. September 2023 09:38

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

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

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

      Павел Дорофеев
      • 8. September 2023 09:40

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

        Павел Дорофеев
        • 8. September 2023 09:43
        • (bearbeitet)

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

          IscanderChe
          • 8. September 2023 12:07

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

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

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

            Kommentare

            Nur autorisierte Benutzer können Kommentare posten.
            Bitte Anmelden oder Registrieren
            Letzte Kommentare
            ИМ
            Игорь Максимов5. Oktober 2024 07:51
            Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas55. Juli 2024 11:02
            QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            k
            kmssr8. Februar 2024 18:43
            Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            EVA
            EVA25. Dezember 2023 10:30
            Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
            Jetzt im Forum diskutieren
            J
            JacobFib17. Oktober 2024 03:27
            добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
            JW
            Jhon Wick1. Oktober 2024 15:52
            Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
            КГ
            Кирилл Гусарев27. September 2024 09:09
            Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
            F
            Fynjy22. Juli 2024 04:15
            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

            Folgen Sie uns in sozialen Netzwerken