Как установить Qt :: Vertical headerData для QSqlQueryModel, увеличивая числа при разбивке на страницы - PullRequest
0 голосов
/ 13 февраля 2012

я делаю простую нумерацию страниц с помощью QSqlQueryModel, выбирая из запроса 10000 * limit все - все работает нормально.но.Теперь я хотел бы отразить Vertical headerData объекта QTableView.
Я реализую headerData, потому что это постоянная функция, я не могу выполнить никаких вычислений внутри нее.поэтому у меня есть проблема, чтобы вычислить правильные числа в вертикальных заголовках.Например, я получаю строки от 20 до 30.
Мне нравится, что вертикальный заголовок показывает числа от 20 до 30.и так далее ...
вот так я реализую headerData:

QVariant PlayListSqlModel::headerData(int section, Qt::Orientation orientation, int role) const 
{

    if(orientation == Qt::Vertical && role == Qt::DisplayRole)
    {

        return section;
    }
    if (role == Qt::DisplayRole)
    {

        if (orientation == Qt::Horizontal) {
            switch (section)
            {
            case 0:
                return QString("name");
            case 1:
                return QString("From");
            case 2:
                return QString("Created Time");
            case 3:
                return QString("last name");
            case 4:

            }
        }
    }
    return QVariant();
}

ОБНОВЛЕНИЕ:
я даже пытаюсь вызвать функцию const, которая выполняет вычисление, но все равно у меня ошибка компиляцииновая функция const: ошибка C2166: l-значение указывает объект const

int PlayListSqlModel::calculateVerticalHeader()  const 
{
    int returnHeaderCount = m_iHeaderCount;
    m_iHeaderCount++;
    return returnHeaderCount;

}


QVariant PlayListSqlModel::headerData(int section, Qt::Orientation orientation, int role) const 
{

    if(orientation == Qt::Vertical && role == Qt::DisplayRole)
    {

        return calculateVerticalHeader();
    }
    if (role == Qt::DisplayRole)
    {

        if (orientation == Qt::Horizontal) {
            switch (section)
            {
            case 0:
                return QString("Clip");
            case 1:
                return QString("From");
            case 2:
                return QString("Created Time");
            case 3:
                return QString("Rating");
            case 4:
                return QString("Feed");
            case 5:
                return QString("Double click to watch");
            }
        }
    }
    return QVariant();
}

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Пока у вас есть доступная переменная-член, содержащая текущую страницу, вы можете просто умножить ее на количество строк на странице + строка.

  if(orientation == Qt::Vertical && role == Qt::DisplayRole)
    {

        return QString("%1").arg(m_currentPage*m_rowsPerPage+section);
    }

Но, как сказал Alxx, вы думаете, что не можете выполнять какие-либо вычисления, возможно потому, что вам не удается вызвать неконстантные методы, которые возвращают переменные, которые я использовал в приведенном выше примере, верно?

Обновление Причина, по которой вы получаете ошибку C2166: l-значение задает объект const , потому что вы пытаетесь увеличить переменную класса: m_iHeaderCount ++ , что недопустимо в объявленном const методе. Вы можете изменять локальные переменные в методе headerData, но не переменные класса.

1 голос
/ 13 февраля 2012

>> потому что это постоянная функция, внутри которой я не могу вычислить
У вас странное понимание const в C ++. Константная функция не может модифицировать this объект или вызывать неконстантные функции, вот и все. Ваша модель знает текущую страницу и размер страницы, не так ли? Если это так, он может рассчитывать номера строк. Если ваши служебные функции, такие как currentPage() и rowCount() (или что-то еще), не являются константными, отметьте их так. В любом случае, это хорошая практика.

0 голосов
/ 13 февраля 2012

Вы уже делаете в точности то, что нужно. Переменная section указывает, какую строку (в случае, если orientarion равно Qt::Vertical) необходимо обработать. И если вы хотите вернуть только номер строки, вы можете просто вернуть QVariant(QString::number(section))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...