Я имею в виду код в этом ответе и в этом для создания таблицы с флажками.
Я пытаюсь создать таблицу, которая показываетсписок студентов в моей базе данных с флажком рядом с.
Теперь, когда я это сделал,
Вопрос:
Как сохранить значение флажков в моей базе данных sql?
Как представить начальное состояние флажков из значения в базе данных?(Например: 1 для флажка установлен, 0 для не отмечен)
(Я открыт для любых способов выполнения вышеуказанного требования, поэтому не стесняйтесь предоставить свое решение, кроме кодов ниже) Вот мой код:
mysqlquerymodel.h
class MySqlQueryModel : public QSqlQueryModel
{
Q_OBJECT
public:
explicit MySqlQueryModel(QObject *parent = 0);
Qt::ItemFlags flags(const QModelIndex & index) const;
QVariant data(const QModelIndex & index, int role) const;
bool setData(const QModelIndex & index, const QVariant & value, int role);
QMap<int, Qt::CheckState> check_state_map;
};
mysqlquerymodel.cpp (игнорируйте qdebug для проверки)
MySqlQueryModel::MySqlQueryModel(QObject *parent) : QSqlQueryModel(parent), check_state_map()
{
}
Qt::ItemFlags MySqlQueryModel::flags(const QModelIndex & index) const
{
if (!index.isValid()) {
qDebug()<<("item1");
return nullptr;
}
if (index.column() == 2){
qDebug()<<("item2");
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable;
}
qDebug()<<("item3");
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
QVariant MySqlQueryModel::data(const QModelIndex & index, int role) const
{
if (!index.isValid()){
qDebug()<<("data1");
return QVariant();
}
if(role== Qt::CheckStateRole)
{
if(index.column() == 2)
{
if (check_state_map.contains(index.row())){
qDebug()<<("data2");
return check_state_map[index.row()] == Qt::Checked ? Qt::Checked : Qt::Unchecked;
}
qDebug()<<("data3");
return Qt::Unchecked;
}
}
return QSqlQueryModel::data(index,role);//!!!!!
}
bool MySqlQueryModel::setData(const QModelIndex & index, const QVariant & value, int role)
{
if(!index.isValid()){
qDebug()<<("set1");
return false;
}
if (role == Qt::CheckStateRole && index.column() == 2)
{
qDebug()<<("set2");
check_state_map[index.row()] = (value == Qt::Checked ? Qt::Checked : Qt::Unchecked);
}
qDebug()<<("set3");
return true;
}
Я пытаюсь реализовать егов tawindow.ui
tawindow.cpp
//load table
void TAWindow::on_loadBtn_clicked(){
conn.connOpen();
QSqlQuery* qry = new QSqlQuery(conn.mydb);
qry->prepare("select * from students");
qry->exec();
tablemodel->setQuery(*qry);
ui->tableView->setModel(tablemodel);
conn.connClose();
}
//save table and update database
void TAWindow::on_saveBtn_clicked()
{
}
Заранее спасибо.