Объясните, пожалуйста, часть кода на С++ (Qt)

116
09 декабря 2020, 01:40

Пытался разобраться как добавить чекбоксы на представление. Нашел один вариант: ссылка Так приведен такой вариант решения

QVector<int> status;
int SData::getStatus(int pos)
{
    return status.at(pos);
}
void SData::setStatus(int pos,int value)
{
    status.insert(pos, value);
}
QVariant STableModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();
    if (role == Qt::DisplayRole)
        return rowList[index.row()][index.column()];
    else if (role == Qt::CheckStateRole && index.column() == 0)
    {
        int status = SData::instance().getStatus(index.row());
        if (status)
            return Qt::Checked;
        else
            return Qt::Unchecked;
    }
    else
        return QVariant();
}
bool STableModel::setData(const QModelIndex &index,
                         const QVariant &value, int role)
{
    if (!index.isValid() /*|| role != Qt::EditRole*/)
        return false;
    if (role == Qt::CheckStateRole)
    {
        if ((Qt::CheckState)value.toInt() == Qt::Checked)
        {
            SData::instance().setStatus(index.row(),1);
            return true;
        }
        else
        {
            SData::instance().setStatus(index.row(), 0);
            return true;
        }
    }

Непонятна эта часть кода:

int SData::getStatus(int pos)
{
    return status.at(pos);
}
void SData::setStatus(int pos,int value)
{
    status.insert(pos, value);
}

SData это класс наследованный от чего? getStatus и setStatus это статические методы класса?

И больше всего непонятна конструкция:
int status = SData::instance().getStatus(index.row());
instance() ? Это что? Как им пользоваться? Это метод наследного класса? Если да, то какого?

Answer 1

В принципе, удалось, разобраться. instance() оказался реализацией Singleton- заключается в использовании локальной статической переменной метода instance, хранящей единственный экземпляр класса (Синглтон Меерса).Блягодаря этой статье На данном этапе все заработало. Дальше буду разбираться.

READ ALSO
Как удалить все виджеты со слоя (компоновщика) Qt

Как удалить все виджеты со слоя (компоновщика) Qt

У меня есть слой, который заполняется виджетами

97
в QInputDialog выводит запятую вместо точки для getDouble

в QInputDialog выводит запятую вместо точки для getDouble

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

107
Перестал работать QWebSocket

Перестал работать QWebSocket

Клиент на qt перестал подключаться к вебсокету, хотя сервер работает исправноК серверу подключен cloudflare, подключение осуществляется через...

98
Поддержка Windows XP в Visual Studio 2019

Поддержка Windows XP в Visual Studio 2019

После установки свежей VS 2019 заметил, что отсутствует возможность выбрать Windows XP Support в настройках проекта (v141_xp toolset раньше назывался)Эту фичу...

132