BlinCT
BlinCT30. Oktober 2019 07:17

Заполнение из TableModel происходит только для первого столбца

Всем привет.
При дебаге заметил что в методе data(const QModelIndex &index, int role) аргумент role изменяется, и получается что в switch не проходит проверку.
То есть заполняется первый столбец который попал под аргумент со значением 0 а дальше проверка пролетает.
Подскажите, я где то ошибаюсь в реализации или может ошибку допустил?
Спасибо

//
// Created by root on 08.10.19.
//

#include <QDebug>
#include <utility>

#include "TableModel.hpp"
#include "SupPowerStatesModelObject.hpp"

TableModel::TableModel(QVector<SupportedPowerStates * > vector)
    : m_columnCount(0)
    , m_rowCount(0)
    , m_object(0)
    , m_vector(std::move(vector))
{}

int TableModel::rowCount(const QModelIndex &parent) const
{
    return m_vector.size();
}

int TableModel::columnCount(const QModelIndex &parent) const
{
    return 11;
}

QVariant TableModel::data(const QModelIndex &index, int role) const
{
    if(!index.isValid())
    {
        qDebug() << "Not Valid: ";
        return QVariant();
    }

    int row = index.row();
    int col = index.column();

    auto tmp = m_vector.at(row);

    switch (role)
    {
        case Qt::DisplayRole:
            return getData(tmp, col);
        default:
            break;
    }

    return QVariant();
}

QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if( role != Qt::DisplayRole )
    {
        return QVariant();
    }

    if( orientation == Qt::Vertical )
    {
        return section;
    }

    switch( section )
    {
        case 0:
            return tr( "St" );
        case 1:
            return tr( "Op" );
        case 2:
            return tr( "Max" );
        case 3:
            return tr( "Active" );
        case 4:
            return tr( "Idle" );
        case 5:
            return tr( "RL" );
        case 6:
            return tr( "RT" );
        case 7:
            return tr( "WL" );
        case 8:
            return tr( "WT" );
        case 9:
            return tr( "Ent_Lat" );
        case 10:
            return tr( "Ex_lat" );
    }

}

QVariant TableModel::getData(SupportedPowerStates* data, int column) const
{
    if (column == 0)
        return QVariant(data->id);
    else if (column == 1)
        return QVariant(data->nvmeIdPowerState.flags);
    else if (column == 2)
            return QVariant(data->nvmeIdPowerState.max_power);
    else if (column == 3)
            return QVariant(data->nvmeIdPowerState.active_power);
    else if (column == 4)
            return QVariant(data->nvmeIdPowerState.idle_power);
    else if (column == 5)
            return QVariant(data->nvmeIdPowerState.read_lat);
    else if (column == 6)
            return QVariant(data->nvmeIdPowerState.read_tput);
    else if (column == 7)
            return QVariant(data->nvmeIdPowerState.write_lat);
    else if (column == 8)
            return QVariant(data->nvmeIdPowerState.write_tput);
    else if (column == 9)
        return QVariant(data->nvmeIdPowerState.entry_lat);
    else if (column == 10)
        return QVariant(data->nvmeIdPowerState.exit_lat);
}

QHash<int, QByteArray> TableModel::roleNames() const
{
    QHash<int, QByteArray> roles;
    roles[St]       = "St";
    roles[Op]       = "Op";
    roles[Max]      = "Max";
    roles[Active]   = "Active";
    roles[Idle]     = "Idle";
    roles[RL]       = "RL";
    roles[RT]       = "RT";
    roles[WL]       = "WL";
    roles[WT]       = "WT";
    roles[Ent_Lat]  = "Ent_Lat";
    roles[Ex_lat]   = "Ex_lat";
    return roles;
}

//////////////////////////////////////////////////////////////

TableView
{
    clip: true

    TableViewColumn { width: 40; role: "St"; title: "St" }
    TableViewColumn { width: 40; role: "Op"; title: "Op" }
    TableViewColumn { width: 80; role: "Max"; title: "Max" }
    TableViewColumn { width: 80; role: "Active"; title: "Active" }
    TableViewColumn { width: 40; role: "Idle"; title: "Idle" }
    TableViewColumn { width: 40; role: "RL"; title: "RL" }
    TableViewColumn { width: 40; role: "RT"; title: "RT" }
    TableViewColumn { width: 40; role: "WL"; title: "WL" }
    TableViewColumn { width: 40; role: "WT"; title: "WT" }
    TableViewColumn { width: 80; role: "Ent_Lat"; title: "Ent_Lat" }
    TableViewColumn { width: 80; role: "Ex_lat"; title: "Ex_lat" }

    model: tableModel
}
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

4
МП
  • 30. Oktober 2019 07:42
  • Die Antwort wurde als Lösung markiert.

Ну так вы определили роли. Вот в data их и используйте теперь. role это столбец.

    МП
    • 30. Oktober 2019 07:45

    Первое что попалось:

      BlinCT
      • 30. Oktober 2019 07:48

      Спасибо, понял где реализация не доделана)

        BlinCT
        • 30. Oktober 2019 09:08

        Только проблема в том что приходится юзать первые контролы. И все вместе это выглядит убого.

          Kommentare

          Nur autorisierte Benutzer können Kommentare posten.
          Bitte Anmelden oder Registrieren
          Letzte Kommentare
          A
          ALO1ZE19. Oktober 2024 08:19
          Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
          ИМ
          Игорь Максимов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> в заголовочном файле не работает валидатор.
          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