Всем добра.
Возникает ошибка при компиляции: "invalid conversion from int
to int(*)()
[-fpermissive]",при нажатии кнопки вызова функции добавления строки в БД SQLite через модел/представление.
void CommonWindow::addRowClicked()
{
int a = 1;
m_model->insertRows(m_model->rowCount(QModelIndex()), a, QModelIndex());
}
Проблема с m_model->rowCount(QModelIndex())
int TableModel::rowCount(const QModelIndex &index) const
{
QSqlQuery query(QString("SELECT count(*) FROM %1").arg(dBName));
int rowsNumber = query.value(0).toInt();
return rowsNumber;
}
вот сама функция вставки строки:
bool TableModel::insertRows(int rowCount(), int rows , const QModelIndex &parent)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
{
int rows=1;
QSqlQuery query(QString("INSERT INTO %1 (depthHole, inclinationAngle, horizontalAngle, TVD, intensityInclAngle, intensityHorizontAngle, color, comment) DEFAULT VALUES").arg(dBName));
}
endInsertRows();
return true;
}
вот только я не совсем понимаю: Ошибка "conversion from int to int(*)()" это получается из int в int указалтель. Но я нигде не вижу указателя. Может быть конечно все таки лыжи едут, а дело во мне...
int(*)()
- это не просто указатель, а указатель на функцию. Вы вызываете метод insertRows
так:
/* Это int */
m_model->insertRows(m_model->rowCount(QModelIndex()), a, QModelIndex());
А объявили эту функцию так:
/* Это int(*)()*/
bool TableModel::insertRows(int rowCount(), int rows , const QModelIndex &parent)
Теперь видите ошибку?
UPD.
Во-первых, вы не переопределили виртуальную функцию, а написали новую. Чтобы компилятор проверял, действительно ли виртуальная функция переопределена, добавьте в h-файле после объявления функции слово override
:
virtual bool insertRows(int rowCount, int rows, const QModelIndex &parent) override;
Во-вторых, в определении функции не может быть вызова другой функции. Количество строк в таблице вы вычисляете при вызове и передаёте с первым аргументом и делаете это правильно.
UPD2.
Давайте разберёмся. Вот ваш вызов функции:
m_model->insertRows(m_model->rowCount(QModelIndex()), a, QModelIndex());
здесь эта конструкция
m_model->rowCount(QModelIndex())
вычисляет количество строк в модели. Полученное число типа int
передаётся как параметр в функцию insertRows
. Стало быть, функция insertRows
должна это число типа int
принять. Зачем тогда вы пытаетесь "вызвать" функцию в определении функции insertRows
? У вас как раз и получился не вызов, а объявление указателя на функцию. Сделайте так:
bool TableModel::insertRows(int rowCount, int rows , const QModelIndex &parent)
и всё заработает.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Задачей есть приложение, которое будет открывать xls-файл, редактировать по шаблону в нём выбранную колонку (в данном случае дату) и сохранять...
Стало интересно, как читать стандартФормальные правила типа BNF, EBNF, Z, ASN
Пишу программу для перехвата tcp-трафика в корпоративной сети, при котором клиенту отправляется обратно tcp-пакет с html-страницей (какая-нибудь...
Начал изучать графику, изучаю функции матбиблиотеки dx, и одна функция отказывается работать