Беру из БД часть значений, пихаю их в comboBox, хочу одну строку в боксе пустую, чтобы она была одним из вариантов, как её добавить?
поправка: из бд в модель, модель в бокс
только добавляй свою строку после того как модель туда запихнул
QSqlQueryModel * query=new QSqlQueryModel;
query->setQuery(str,db);
comboBox->setModel(query);
qDebug()<<query->insertRow(0); //false
QSqlQueryModel * query=new QSqlQueryModel;
query->setQuery(str,db);
comboBox->setModel(query);
comboBox->insertItem(0,"Еще один элемент в комбобоксе");
ничего не даёт, так понимаю, что боксу назначена модель, и он не станет отображать прям в него засунутые ячейки
Создай свою модель и делай там что хочешь.
Примерно так это будет выглядеть:
class MyModel : public QAbstractItemModel
{
Q_OBJECT
public:
explicit MyModel(QObject *parent = 0);
~MyModel();
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex &child) const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
inline QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
{
// Если запрашивают строку с индексом ноль,
// возвращаем пустое значение
if (index.row() == 0) {
return QVariant();
}
// Во всех других случаях возвращаем данные
// из QSqlQueryModel
return m_model->data(index.sibling(index.row() - 1, index.column()), role);
}
private:
QSqlQueryModel *const m_model;
};
данные из m_model в бокс не попадают
если я правильно понял смысл: в m_model помещаю мой запрос, боксу присваиваю экземпляр MyModel
наследовался от QSqlQueryModel, потому что компилятор, при наследовании от QAbstractItemModel, ругается на все функции, что они абстрактные - что это значит?
Да, в m_model помещаешь свой запрос. Наследоваться от QSqlQueryModel не надо. Ругается на все функции, потому что они не реализованы. Реализуй их, как в моём примере реализован метод data. Не знаешь, как реализовать - открой исходники той же QSqlQueryModel и посмотри там.
Читай про виртуальные функции, например, http://www.interface.ru/home.asp?artId=5895.
но если я наследуюсь от qsqlquerymodel смысл же остаётся тот же? почему бы в этом случае функции data не работать по твоему сценарию?
themeModel=new QSqlTableModel;
themeModel->setTable("themes");
themeModel->select();
widget.themecomboBox->setModel(themeModel);
widget.themecomboBox->setModelColumn(themeModel->fieldIndex("name"));
widget.themecomboBox->insertItem(0,QString::fromUtf8("Все вопросы"));
widget.themecomboBox->setCurrentIndex(0);
с QSqlTableModel действительно работает, а с QSqlQueryModel нет..
сделал через QSqlTableModel, поставил нужное ограничение с помощью её функции setFilter
vankleef мой герой!
arial, я завтра на работе в книге посмотрю, там должны быть примеры ("Земсков, примеры"), научусь наследоваться от абстрактитем и проверю твой вариант.
если не выйдет, попрошу у тебя помощи, спасибо за поддержку
В приложении рабочий пример. Выкладываю, как и обещал.
спасибо, arial
return hasIndex(row, column, parent) ? createIndex(row, column, 0) : QModelIndex(); // что означают ? и :
http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BD%D0%B0%D1%80%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F
понял)
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)