【问题标题】:QTableview how to save checkbox value c++QTableview如何保存复选框值c ++
【发布时间】:2019-02-11 09:57:41
【问题描述】:

我指的是answerthis 中的代码来创建带有复选框的表格视图。

我正在尝试创建一个表,该表在我的数据库中显示学生列表,旁边有复选框。

现在我已经做到了,

问题是:

  1. 如何将复选框的值保存到我的 sql 数据库中?

  2. 如何从数据库中的值呈现复选框的初始状态? (例如: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()
    {

    }

提前致谢。

【问题讨论】:

    标签: c++ qt sqlite


    【解决方案1】:

    你可以使用ui-&gt;combobox-&gt;ischecked();来检查comboBox是否被选中。

    要存储组合框的状态,您可以使用变量。

    类似这样的:

    QString var;
    
    if(ui->comboBox->isChecked())
    {
        var = "Checked";
    }
    else
    {
        var = "Not Checked";
    }
    

    并将 var 存储在您的数据库中。

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多