首页 > 在QTableView中添加QCombox后,利用setData去修改其中数据后数据不能同步到数据库。

在QTableView中添加QCombox后,利用setData去修改其中数据后数据不能同步到数据库。

软件环境:ubuntu14.04 QT5.5
硬件环境:联想笔记本


问题:在QCombox中将男生选择为女生 可以同步到数据库 , 而将女生选择为男生不能同步到数据库。

代码:

/******************** 整个头文件***********************/
#ifndef MYWIDGET_03_H
#define MYWIDGET_03_H

#include <QWidget>
#include <QSqlTableModel>
#include <QTableView>
#include <QApplication>
#include <QItemDelegate>
#include <QComboBox>
#include <QDebug>

class FYXTuserDelegate : public QItemDelegate  // 自定义代理
{

public:

    QWidget *createEditor(QWidget *parent,
                          const QStyleOptionViewItem &option,
                          const QModelIndex &index) const
    {


        if(index.column() == 6){
            QComboBox*  comBox = new QComboBox(parent) ;
            comBox->addItem("男");
            comBox->addItem("女");
            return comBox ;
        }
        return QItemDelegate::createEditor(parent,option,index);
    }



};

class FYXMySqlTableModel : public QSqlTableModel // 自定义的Model
{
public:
    QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const
    {
        if(idx.column() != 6){
            return QSqlTableModel::data(idx,role) ;
        }

        QVariant ret = QSqlTableModel::data(idx,role) ;
        if(idx.column() == 6 && idx.row() == 0 )
                  qDebug() << ret.toString().toStdString().c_str() ;
        if(ret == 0){
            return "男";
        }
              return "女";

   }

    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
    {
           if(index.column() != 6)
                return QSqlTableModel::setData(index,value,role) ;
            if(value == "男"){
                return QSqlTableModel::setData(index,0) ;
            }
            else
                return QSqlTableModel::setData(index,1) ;
    }


};

class MyWidget_03 : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget_03(QWidget *parent = 0);

private:
        FYXMySqlTableModel* _model ;
         QTableView* _view ;

signals:

public slots:
         void slotSublimtFunction() ;
         void slotAddFunction() ;
         void slotDeleteFunction() ;
};

#endif // MYWIDGET_03_H
/*********************** .cpp 文件中设置代理代码*********************/
// .cpp文件其余代码是连接数据库,提交数据库数据的代码就不贴了
        _view = new QTableView() ;
        _view->setModel(_model);
        this->setFixedSize(_view->size());
        _view->setItemDelegate(new  FYXTuserDelegate() );

// 界面

希望能够得到帮助,谢谢。


从我一点不成熟的经验来看,你可以在这里下一个断点if(value == "男"){
当女生选择为男生的时候,看看value是什么

但是说实话,我十分怀疑你这个QVariant == QString的判断是不太严谨的代码。

但愿能帮助到你

【热门文章】
【热门文章】