qt 在子类中无法添加数据到数据库中_qt,c++_在QTableView中添加QCombox后,利用setData去修改其中数据后数据不能同步到数据库。,qt,c++,mysql - phpStud...

在Ubuntu 14.04环境下,QT5.5应用中遇到问题:QTableView结合QComboBox显示数据库性别数据,选择QComboBox项后无法同步回数据库。问题在于将女生选为男生时数据未更新。代码实现包括自定义代理FYXTuserDelegate和自定义模型FYXMySqlTableModel。寻求解决方案。
摘要由CSDN通过智能技术生成

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

软件环境:ubuntu14.04 QT5.5

硬件环境:联想笔记本

代码实现目的:使搜索的数据中性别那一列能够以QCombox形式呈现,并且通过QCombox选择数据后可以同步到数据库。

思路:通过为QTableView去显示QSqlTableModel搜索的数据,同时为QTableView提供一个自定义代理,使得性别那一列以QComBox形式呈现。然后通过选择QCombox的下拉框中文本,将文本同步到数据库中。(注意:性别 在数据库存储是 0 代表男生 1 :代表女生 ,我使用QSqlTableModel::data去翻译0与1 使用QSqlTableModel::

setData按照QCombox选择的男生或者女生设置0与1 同步到数据库)

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

代码:

/******************** 整个头文件***********************/

#ifndef MYWIDGET_03_H

#define MYWIDGET_03_H

#include

#include

#include

#include

#include

#include

#include

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() );

// 界面

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

相关阅读:

找算式 C++语言 添加符号

IE8背景background: url不显示图片?

npm install构建项目报错,求解。

hexo搭建静态博客,首页只显示一篇文章

Android 执行其他服务中AIDL的方法,不能再Activity的生命周期方法中执行?

如何获取一个元素相对于浏览器左上角的位置?

ios点击icon进入程序怎么获取推送消息

在webstom中如何获得ReactJS相关的代码提示?

uisearchbar 点击文本框的清除按钮,如何使键盘收起?

为什么中国没有自己的编程语言?

"where name like '陈__'" 的奇怪现象

docuemnt.querySelector() API的源码

这个laravel的语法错误怎么写才对?

有什么方法可以判断是否有手指放在屏幕上。

保存变量的地址

下图这样的动画效果如何制作

菜鸟关于JADE的问题

angularjs路由不跳转用这行代码设置就好了,原理是什么?

使用 SQLAlchemy 的时候怎么缓存数据的?

threadingtest配套安装的eclipse打包的apk为何在手机上不能运行,求解答?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值