И так, довелось мне на днях писать программу для работы с БД, сама программа представляла из себя
коннект к базе данных и отображение запрошенных данных в представлении, так как времени у меня
не было я оставил затею использовать QSqlTableModel, а просто сделал сабкласс QAbstractTableModel и
определил ф-ции вроде select() внутри которых я использовал QSqlQuery, пример моей ф-ции select():
C++ (Qt)
bool BooksModel::select(QString tableName)
{
BookData bookData;
QSqlQuery query;
QSqlDatabase::database().transaction();
currentBooksList.clear();
query.exec(tr("SELECT * FROM `%1`").arg(tableName));
while (query.next())
{
bookData.id = query.value(DB::Column_id).toInt();
bookData.title = query.value(DB::Column_title).toString();
bookData.autor = query.value(DB::Column_autor).toString();
bookData.publisher = query.value(DB::Column_publish).toString();
bookData.year = query.value(DB::Column_year).toInt();
bookData.edition = query.value(DB::Column_run).toInt();
bookData.rating = query.value(DB::Column_rating).toInt();
currentBooksList.append(Book(bookData));
}
Все отлично, но на днях я подумал что это не "тру-вей" и QSqlTableModel сделана не просто так для красоты,
решил сделать тестовую программу, но тут натолкнулся на подводные, хотя и как оказалось камни и не совсем
подводные:
1. Если у таблицы имя кириллическое вызов ф-ции bool QSqlTableModel::select () вернет false и запрос не будет
обработан. Порывшись в исходниках, а именно в qt\src\sql\models\qsqltablemodel.cpp я увидел что они используют
класс QLatin1String, наверно это и есть корень зла
2. После успешного переопределения ф-ции select () проблема осталась в выделении таблицы, короче говоря
таблица отображалась коректно, но ячейку либо строчку выделить нельзя(отображается серым цветом), причем в
если имя таблицы с латиницы отображается все нормально, весьма и весьма странно, короче вам необходимо еще и
переопределить Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const
Вывод как чет я совсем не почуствовал выгод при использовании QSqlTableModel вместо сабкласса
QAbstractTableModel + QSqlQuery для запросов
Буду рад любым мыслям и рассуждениям на данную тематику