BlinCT30 октября 2019 г. 17: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
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
4
MP
  • 30 октября 2019 г. 17:42
  • Ответ был помечен как решение.

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

MP

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

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

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

Комментарии

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

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
VD

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

  • Результат:73баллов,
  • Очки рейтинга1
Ds

C++ - Тест 003. Условия и циклы

  • Результат:64баллов,
  • Очки рейтинга-1
o

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

  • Результат:86баллов,
  • Очки рейтинга6
Последние комментарии
D:

QML - Урок 016. База данных SQLite и работа с ней в QML Qt

Добрый день, пытаюсь разобраться и подргнать пример под себя. Есть бд с огромным количеством полей. В приложении на виджетах при использовании QTableView все работает и путем простого sql запрос…

Django - Урок 039. Добавление личных сообщений и чатов на сайте - Часть 2 (Счётчик диалогов и чатов с непрочитанными сообщениями)

Добавляйте поле файла в модель сообщения. И в форме сообщения указывайте, что поле с файлом.
s

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

все, я со всем разобрался!) Извините!)
s

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

Доброго времени суток!) Я случайно набрел на вашу статью, и она помогла мне решить некоторые мои трудности, я прошел за вами по шагам, в попытках адаптировать это под себя, и возник вопрос. У ва…
Сейчас обсуждают на форуме

Наследование QWidget

Добрый день В addWidget нужно ещё указывать номер строки и колонки, куда добаляется виджет. И в вашем случае лучше Диалоговое окно не наследовать сразу от QDialog и W, а наследовать …
М

QML: изменение стиля при наведении и при нажатии на кнопку

enabled = false перестанет быть активной и не будет ни на что реагировать) Хм.. по-моему пробовал такое. Проверю ещё раз после работы. Ура, спасибо большо…
U

Динамическое наполнение StackView QML

Во затупил))) Спасибо за все))) StackView.push("ModuleTip1.qml") ну или в сложной иерархии StackView.push("qrc:/folder/ModuleTip1.qml") и всего делов... Не пойму, почему сра…

QEventLoop тормозит при удалении экземпляра

Думаю, что нет. Лучше вообще без исключений, но не всегда возможно.
s

Ключевое слово class

Разобрался,на стаковерфлоу нашел топик и понял почему так происходило .
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB