QTableView 如何保存复选框值 c++
QTableview how to save checkbox value c++
我指的是这个答案中的代码,这个来创建带有复选框的表视图。
我正在尝试创建一个表格,该表显示我的数据库中带有复选框的学生列表。
现在我已经做到了,
问题是:
-
如何将复选框的值保存到我的 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 it 进行检查(
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中实现它
塔窗.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()
{
}
提前谢谢。
您可以使用ui->combobox->ischecked();
来检查组合框是否被选中。
要存储组合框的状态,您可以使用变量。
像这样:
QString var;
if(ui->comboBox->isChecked())
{
var = "Checked";
}
else
{
var = "Not Checked";
}
并将 var 存储在数据库中。
相关文章:
- 根据变量使Qt UI中的复选框为已选中/未选中
- "动态创建的事件处理程序"复选框
- 有没有办法在取消选中复选框时隐藏按钮?
- 如何删除Qt设计器中自定义插件的QString属性的"translatable"复选框?
- 设置复选框选项C++
- 如何在所有者描述的 MFC CMenu 派生菜单中显示复选框?
- 如何在MFC对话框应用程序中默认将复选框设置为选中?
- 如何使复选框独占
- AccessObjectFromPoint 返回客户端对象而不是复选框
- Windows 32 API:2个复选框作为一个
- 如何在 QT3 中将复选框添加到 QFileDialog 窗口
- 在 QComboBox 中切换复选框
- 调整QT创建者的复选框
- 如何在C 上创建复选框过滤器
- 如何设置按钮的背景颜色,包括复选框按钮
- 使用 ffh.getFieldType() 检查复选框 == "/Btn" 与 qpdf lib
- 如何在多行文本C++的左上角显示复选框
- Win32如何制作多个复选框并以不同的方式管理它们
- QtableWidget 标题上的复选框
- 如何使用QListView项目添加复选框