当前位置:   article > 正文

QT读写Sqlite数据库三种方式

QT读写Sqlite数据库三种方式

QT对一些基本的数据库的访问封装,可谓是极大的方便的我们开发人员,现在我们就来说下QT对Sqlite这个数据库的读写,Sqlite是一个比较小型的本地数据库,对于保存一些软件配置参数或量不是很大的数据是相当的方便,Qt本身已经自带了Sqlite的驱动,直接使用相关的类库即可,这篇我们主要来说明QT访问Sqlite数据库的三种方式(即使用三种类库去访问),分别为QSqlQuery、QSqlQueryModel、QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更厉害,甚至第三种QSqlTableModel,根本就不需要开发者懂SQL语言,也能操作Sqlite数据库。
1、首先使用QSqlQuery来访问
      我们先要在工程中包含与数据库相关的几个头文件#include <QtSql/QSqlDatabase> 、#include <QtSql/QSqlRecord>、#include <QtSql/QSqlQuery>
访问的数据库内容结构为:

  1. #include <QtWidgets/QApplication>
  2. #include <QCoreApplication>
  3. #include <QDebug>
  4. #include <QtSql/QSqlDatabase>
  5. #include <QtSql/QSqlQuery>
  6. #include <QtSql/QSqlRecord>
  7. typedef struct _testInfo //假定数据库存储内容
  8. {
  9. QString UsreName;
  10. QString IP;
  11. QString Port;
  12. QString PassWord;
  13. QString Type;
  14. }testInfo;
  15. int main(int argc, char *argv[])
  16. {
  17. QApplication a(argc, argv);
  18. QVector<testInfo> infoVect; //testInfo向量,用于存储数据库查询到的数据
  19. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  20. db.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "CONFIG.db");
  21. if (!db.open())
  22. {
  23. return 0;
  24. }
  25. /**************************使用QSqlQuery操作数据库**************************/
  26. QSqlQuery query; //执行操作类对象
  27. //查询数据
  28. query.prepare("SELECT * FROM T_USER_MANAGE");
  29. query.exec(); //执行
  30. QSqlRecord recode = query.record(); //recode保存查询到一些内容信息,如表头、列数等等
  31. int column = recode.count(); //获取读取结果的列数
  32. QString s1 = recode.fieldName(0); //获取第0列的列名
  33. while (query.next())
  34. {
  35. testInfo tmp;
  36. tmp.UsreName = query.value("UsreName").toString();
  37. tmp.IP = query.value("IP").toString();
  38. tmp.Port = query.value("Port").toString();
  39. tmp.PassWord = query.value("PassWord").toString();
  40. tmp.Type = query.value("Type").toString();
  41. infoVect.push_back(tmp); //将查询到的内容存到testInfo向量中
  42. }
  43. for (int i=0; i<infoVect.size(); i++) //打印输出
  44. {
  45. qDebug() << infoVect[i].UsreName << ":" \
  46. << infoVect[i].IP << ":" \
  47. << infoVect[i].Port << ":" \
  48. << infoVect[i].PassWord << ":" \
  49. << infoVect[i].Type;
  50. }
  51. //插入数据
  52. query.prepare("INSERT INTO T_USER_MANAGE (UsreName, IP, Port, PassWord, Type) VALUES (:UsreName, :IP, :Port, :PassWord, :Type)");
  53. query.bindValue(":UserName", "user4"); //给每个插入值标识符设定具体值
  54. query.bindValue(":IP", "192.168.1.5");
  55. query.bindValue(":Port", "5004");
  56. query.bindValue(":PassWord", "55555");
  57. query.bindValue(":Type", "operator");
  58. query.exec();
  59. //更改表中 UserName=user4 的Type属性为admin
  60. query.prepare("UPDATE T_USER_MANAGE SET Type='admin' WHERE UserName='user4'");
  61. query.exec();
  62. //删除表中 UserName=user4的用户信息
  63. query.prepare("DELETE FROM T_USER_MANAGE WHERE UserName='user4'");
  64. query.exec();
  65. #endif

2、使用QSqlQueryModel来访问

    QSqlQueryModel类带有Model字样,相信你已经猜到我们可以用他来关联试图,就能把数据库的内容显示到视图上,当然,常规的操作也是可以的,但是我们只说说怎么用这个类来把数据库中的内容显示到是视图中,这里我们选择的视图类为QTableView,直接上代码吧
 

  1. #include <QtWidgets/QApplication>
  2. #include <QCoreApplication>
  3. #include <QDebug>
  4. #include <QString>
  5. #include <QTableView>
  6. #include <QtSql/QSqlDatabase>
  7. #include <QtSql/QSqlQueryModel>
  8. int main(int argc, char *argv[])
  9. {
  10. QApplication a(argc, argv);
  11. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  12. db.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "CONFIG.db");
  13. if (!db.open())
  14. {
  15. return 0;
  16. }
  17. QSqlQueryModel *model = new QSqlQueryModel;
  18. model->setQuery("SELECT * FROM T_USER_MANAGE", db); //从给定的数据库db执行sql操作, db需预先制定并打开
  19. int column = model->columnCount(); //获取列数
  20. int row = model->rowCount(); //获取行数
  21. model->setHeaderData(0, Qt::Horizontal, QStringLiteral("用户名")); //设置表头,如不设置则使用数据库中的默认表头
  22. model->setHeaderData(1, Qt::Horizontal, QStringLiteral("IP地址"));
  23. model->setHeaderData(2, Qt::Horizontal, QStringLiteral("端口"));
  24. model->setHeaderData(3, Qt::Horizontal, QStringLiteral("密码"));
  25. model->setHeaderData(4, Qt::Horizontal, QStringLiteral("用户类型"));
  26. QTableView *view = new QTableView; //定义视图,只能用于显示,不能修改数据库
  27. view->setFixedSize(500, 200);
  28. view->setModel(model);
  29. view->show();
  30. return a.exec();
  31. }

3、最后使用QSqlTableModel来访问
      最后我们来说说使用QSqlTableModel这个类去操作Sqlite数据库,这个类比上两个封装的更彻底,即使我们不懂SQL语言,也能实现对Sqlite数据库的操作,并且这个类也可以通过视图来显示修改数据库内容,这里我就拿这个类做了个用户管理模块,其实也可以通用与其他任何一个模块,只要在生成对象时传入sqlite的数据库名及要操作的表名即可。

    在这个例子中,我实现了一个KSDemoDlg类,其实是一个对话框类,里边包含了sqlite数据库的显示、修改等等功能,首先来看下效果(常规的增删改查功能都有):

 当我们点击增加、修改时,右边的编辑框便为可编辑状态(说明下,右边的编辑框是随着加载的数据库表变化而变化的,简而言之就是可以不做修改就能操作别的Sqlite数据库),完毕确定后便写进数据库,同时也在左边的表格中显示

  1. #ifndef __KSDEMODLG_H__
  2. #define __KSDEMODLG_H__
  3. #include <QDialog>
  4. #include <QPushButton>
  5. #include <QLineEdit>
  6. #include <QLabel>
  7. #include <QComboBox>
  8. #include <QGroupBox>
  9. #include <QTableView>
  10. #include <QtSql/QSqlTableModel>
  11. #include <QtSql/QSqlDatabase>
  12. class KSDemoDlg : public QDialog
  13. {
  14. Q_OBJECT
  15. enum {UPDATE, INSERT};
  16. int m_operator;
  17. public:
  18. explicit KSDemoDlg(QString databaseName, QString dataTableName, QWidget *parent = 0 );
  19. ~KSDemoDlg();
  20. private:
  21. void UiInit();
  22. protected slots:
  23. void onNewButtonClicked();
  24. void onQueryButtonClicked();
  25. void onUpdateButtonClicked();
  26. void onDeleteButtonClicked();
  27. void onPrimaryKeyLineEditEmpty(const QString & text);
  28. void onCurrentTableViewClicked(const QModelIndex & index);
  29. void onOKButtonClicked();
  30. void onCancelButtonClicked();
  31. private:
  32. QSqlDatabase m_db;
  33. QString m_DBName;
  34. QString m_DBTableName;
  35. private:
  36. QTableView* m_TabView;
  37. QSqlTableModel* m_model;
  38. private:
  39. QList<QLineEdit*> m_infoEditList;
  40. QList<QLabel*> m_infoLabelList;
  41. QPushButton m_OKButton;
  42. QPushButton m_CancelButton;
  43. private:
  44. /*所有用户信息容器组*/
  45. QGroupBox m_Group;
  46. QLabel m_PrimaryKeyLabel;
  47. QLineEdit m_PrimaryKeyLineEdit;
  48. QPushButton m_QueryButton;
  49. QPushButton m_NewButton;
  50. QPushButton m_UpdateButton;
  51. QPushButton m_DeleteButton;
  52. /*所选择用户信息容器组*/
  53. QGroupBox m_SelectGroup;
  54. };
  55. #endif // __KSDEMODLG_H__
  56. .cpp文件
  57. #include <QtWidgets/QApplication>
  58. #include <QCoreApplication>
  59. #include <QString>
  60. #include <QFormLayout>
  61. #include <QVBoxLayout>
  62. #include <QHBoxLayout>
  63. #include <QMessageBox>
  64. #include <QtSql/QSqlRecord>
  65. #include <QDebug>
  66. #include "KSDemoDlg.h"
  67. /**************************************************************************
  68. * 函数名称:KSDemoDlg
  69. * 函数功能:用户管理对话框构造函数
  70. * 输入参数:无
  71. * 输出参数:无
  72. * 返回数值:void
  73. * 创建人员:
  74. * 创建时间:2017-11-15
  75. * 修改人员:
  76. * 修改时间:
  77. **************************************************************************/
  78. KSDemoDlg::KSDemoDlg(QString databaseName, QString dataTableName, QWidget *parent):QDialog(parent, Qt::WindowCloseButtonHint | Qt::WindowMinMaxButtonsHint | Qt::WindowStaysOnTopHint),
  79. m_Group(this), m_PrimaryKeyLabel(this), m_PrimaryKeyLineEdit(this), m_QueryButton(this), m_NewButton(this), m_UpdateButton(this), m_DeleteButton(this), m_TabView(NULL),m_model(NULL),
  80. m_OKButton(this),m_CancelButton(this), m_DBName(databaseName), m_DBTableName(dataTableName), m_operator(-1)
  81. {
  82. //打开数据库
  83. m_db = QSqlDatabase::addDatabase("QSQLITE");
  84. m_db.setDatabaseName(QApplication::applicationDirPath() + "/config/" + databaseName);
  85. if (!m_db.open())
  86. {
  87. m_DBName = "";
  88. m_DBTableName = "";
  89. }
  90. m_model = new QSqlTableModel(this, m_db);
  91. m_model->setTable(m_DBTableName);
  92. m_model->setEditStrategy(QSqlTableModel::OnManualSubmit); //手动提交后才修改
  93. m_model->select();
  94. m_TabView = new QTableView(this);
  95. m_TabView->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置内容不可编辑
  96. /*************关联槽函数*********************/
  97. connect(&m_NewButton, SIGNAL(clicked()), this, SLOT(onNewButtonClicked()));
  98. connect(&m_QueryButton, SIGNAL(clicked()), this, SLOT(onQueryButtonClicked()));
  99. connect(&m_UpdateButton, SIGNAL(clicked()), this, SLOT(onUpdateButtonClicked()));
  100. connect(&m_DeleteButton, SIGNAL(clicked()), this, SLOT(onDeleteButtonClicked()));
  101. connect(&m_PrimaryKeyLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(onPrimaryKeyLineEditEmpty(const QString &)));
  102. connect(m_TabView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(onCurrentTableViewClicked(const QModelIndex &)));
  103. connect(&m_OKButton, SIGNAL(clicked()), this, SLOT(onOKButtonClicked()));
  104. connect(&m_CancelButton, SIGNAL(clicked()), this, SLOT(onCancelButtonClicked()));
  105. /*************模型关联视图*******************/
  106. m_TabView->setModel(m_model);
  107. /*************选中行为为整行选中*************/
  108. m_TabView->setSelectionBehavior(QAbstractItemView::SelectRows);
  109. /*************对话框窗体初始化***************/
  110. UiInit();
  111. /*************对话框窗体初始化***************/
  112. setFixedSize(600, 400);
  113. setWindowTitle(QStringLiteral("用户管理"));
  114. }
  115. /**************************************************************************
  116. * 函数名称:UiInit
  117. * 函数功能:用户管理对话框界面初始化
  118. * 输入参数:无
  119. * 输出参数:无
  120. * 返回数值:void
  121. * 创建人员:
  122. * 创建时间:2017-11-15
  123. * 修改人员:
  124. * 修改时间:
  125. **************************************************************************/
  126. void KSDemoDlg::UiInit()
  127. {
  128. m_PrimaryKeyLabel.setText(m_model->headerData(0, Qt::Horizontal).toString());
  129. m_NewButton.setText(QStringLiteral("增加"));
  130. m_QueryButton.setText(QStringLiteral("查询"));
  131. m_UpdateButton.setText(QStringLiteral("修改"));
  132. m_DeleteButton.setText(QStringLiteral("删除"));
  133. m_UpdateButton.setEnabled(true);
  134. m_OKButton.setText(QStringLiteral("确定"));
  135. m_CancelButton.setText(QStringLiteral("取消"));
  136. /**************灵活增加界面右侧数据显示形式******************/
  137. for(int i=0; i<m_model->columnCount(); i++)
  138. {
  139. m_infoLabelList.append(new QLabel(this));
  140. m_infoLabelList[i]->setText(m_model->headerData(i, Qt::Horizontal).toString());
  141. m_infoEditList.append(new QLineEdit(this));
  142. m_infoEditList[i]->setEnabled(false);
  143. }
  144. m_OKButton.setEnabled(false);
  145. m_CancelButton.setEnabled(false);
  146. /**************灵活增加界面右侧数据显示形式 END******************/
  147. QHBoxLayout *TotalHBoxLayout = new QHBoxLayout();
  148. QVBoxLayout *TotalVBoxLayout = new QVBoxLayout();
  149. QVBoxLayout *UserGroupVBoxLayout = new QVBoxLayout();
  150. QHBoxLayout *UserEditHBoxLayout = new QHBoxLayout();
  151. QHBoxLayout *UserButtonHBoxLayout = new QHBoxLayout();
  152. QFormLayout *UserPrimaryKeyFormLayout = new QFormLayout();
  153. QFormLayout *UserSelectFormLayout = new QFormLayout();
  154. QHBoxLayout *UserSelectHBoxLayout = new QHBoxLayout();
  155. QVBoxLayout *UserSelectVBoxLayout = new QVBoxLayout();
  156. /*****************界面右侧group布局******************/
  157. for (int i=0; i<m_infoLabelList.count(); i++)
  158. {
  159. UserSelectFormLayout->addRow( m_infoLabelList[i], m_infoEditList[i]);
  160. }
  161. UserSelectHBoxLayout->addWidget(&m_OKButton);
  162. UserSelectHBoxLayout->addWidget(&m_CancelButton);
  163. UserSelectVBoxLayout->addLayout(UserSelectFormLayout);
  164. UserSelectVBoxLayout->addLayout(UserSelectHBoxLayout);
  165. UserSelectVBoxLayout->addStretch();
  166. /*****************界面右侧group布局 END******************/
  167. UserPrimaryKeyFormLayout->addRow(&m_PrimaryKeyLabel, &m_PrimaryKeyLineEdit);
  168. UserEditHBoxLayout->addLayout(UserPrimaryKeyFormLayout);
  169. UserEditHBoxLayout->addWidget(&m_QueryButton);
  170. UserEditHBoxLayout->addStretch();
  171. UserButtonHBoxLayout->addWidget(&m_NewButton);
  172. UserButtonHBoxLayout->addWidget(&m_UpdateButton);
  173. UserButtonHBoxLayout->addWidget(&m_DeleteButton);
  174. UserGroupVBoxLayout->addLayout(UserEditHBoxLayout);
  175. UserGroupVBoxLayout->addLayout(UserButtonHBoxLayout);
  176. m_Group.setLayout(UserGroupVBoxLayout);
  177. TotalVBoxLayout->addWidget(&m_Group);
  178. TotalVBoxLayout->addWidget(m_TabView);
  179. TotalHBoxLayout->addLayout(TotalVBoxLayout, 3);
  180. TotalHBoxLayout->addLayout(UserSelectVBoxLayout, 1);
  181. setLayout(TotalHBoxLayout);
  182. }
  183. /**************************************************************************
  184. * 函数名称:onNewUserButtonClick
  185. * 函数功能:用户管理对话框界新增用户按钮槽函数
  186. * 输入参数:无
  187. * 输出参数:无
  188. * 返回数值:void
  189. * 创建人员:
  190. * 创建时间:2017-11-15
  191. * 修改人员:
  192. * 修改时间:
  193. **************************************************************************/
  194. void KSDemoDlg::onNewButtonClicked()
  195. {
  196. for (int i=0; i<m_infoEditList.count(); i++)
  197. {
  198. m_infoEditList[i]->setEnabled(true);
  199. }
  200. m_operator = INSERT;
  201. m_OKButton.setEnabled(true);
  202. m_CancelButton.setEnabled(true);
  203. }
  204. /**************************************************************************
  205. * 函数名称:onQueryUserButtonClick
  206. * 函数功能:用户管理对话框界查询用户按钮槽函数
  207. * 输入参数:无
  208. * 输出参数:无
  209. * 返回数值:void
  210. * 创建人员:廖明胜
  211. * 创建时间:2017-11-15
  212. * 修改人员:
  213. * 修改时间:
  214. **************************************************************************/
  215. void KSDemoDlg::onQueryButtonClicked()
  216. {
  217. QString toFind = m_PrimaryKeyLineEdit.text();
  218. QString ID = m_model->headerData(0, Qt::Horizontal).toString();
  219. m_model->setFilter(ID + "=\'" + toFind + "\'");
  220. m_model->select();
  221. }
  222. /**************************************************************************
  223. * 函数名称:onUpdateButtonClicked
  224. * 函数功能:用户管理对话框界修改用户按钮槽函数
  225. * 输入参数:无
  226. * 输出参数:无
  227. * 返回数值:void
  228. * 创建人员:
  229. * 创建时间:2017-11-15
  230. * 修改人员:
  231. * 修改时间:
  232. **************************************************************************/
  233. void KSDemoDlg::onUpdateButtonClicked()
  234. {
  235. int toUpdate = m_TabView->currentIndex().row();
  236. QSqlRecord recode = m_model->record(toUpdate);
  237. for (int i=0; i<recode.count(); i++)
  238. {
  239. m_infoEditList[i]->setEnabled(true);
  240. m_infoEditList[i]->setText(recode.value(i).toString());
  241. }
  242. m_operator = UPDATE;
  243. m_OKButton.setEnabled(true);
  244. m_CancelButton.setEnabled(true);
  245. }
  246. /**************************************************************************
  247. * 函数名称:onDeleteButtonClicked
  248. * 函数功能:用户管理对话框界删除用户按钮槽函数
  249. * 输入参数:无
  250. * 输出参数:无
  251. * 返回数值:void
  252. * 创建人员:
  253. * 创建时间:2017-11-15
  254. * 修改人员:
  255. * 修改时间:
  256. **************************************************************************/
  257. void KSDemoDlg::onDeleteButtonClicked()
  258. {
  259. int toDelRow = m_TabView->currentIndex().row();
  260. if (QMessageBox::Ok == QMessageBox::warning(this, QStringLiteral("提示"), QStringLiteral("确定要删除") + m_model->data(m_model->index(toDelRow, 0)).toString() + QStringLiteral("吗?"), QMessageBox::Ok|QMessageBox::No))
  261. {
  262. m_model->removeRow(toDelRow);
  263. m_model->submitAll();
  264. }
  265. m_model->select();
  266. }
  267. /**************************************************************************
  268. * 函数名称:onUserNameEditEmpty
  269. * 函数功能:当m_UserNameEdit编辑框为空时,显示所有用户
  270. * 输入参数:无
  271. * 输出参数:无
  272. * 返回数值:void
  273. * 创建人员:
  274. * 创建时间:2017-11-15
  275. * 修改人员:
  276. * 修改时间:
  277. **************************************************************************/
  278. void KSDemoDlg::onPrimaryKeyLineEditEmpty(const QString & text)
  279. {
  280. if (text.isEmpty())
  281. {
  282. m_model->setTable(m_DBTableName); //重新关联数据库表,这样才能查询整个表
  283. m_model->select();
  284. }
  285. }
  286. /**************************************************************************
  287. * 函数名称:onCurrentTableViewActived
  288. * 函数功能:m_TableView视图选取当前行槽函数,内容映射到右侧用户编辑中
  289. * 输入参数:无
  290. * 输出参数:无
  291. * 返回数值:void
  292. * 创建人员:
  293. * 创建时间:2017-11-15
  294. * 修改人员:
  295. * 修改时间:
  296. **************************************************************************/
  297. void KSDemoDlg::onCurrentTableViewClicked(const QModelIndex & index)
  298. {
  299. if (!m_OKButton.isEnabled() || (INSERT == m_operator)) //只有可编辑并且操作为修改操作时才映射内容
  300. {
  301. return;
  302. }
  303. int currentRow = index.row();
  304. QSqlRecord recode = m_model->record(currentRow);
  305. for (int i=0; i<recode.count(); i++)
  306. {
  307. m_infoEditList[i]->setEnabled(true);
  308. m_infoEditList[i]->setText(recode.value(i).toString());
  309. }
  310. }
  311. /**************************************************************************
  312. * 函数名称:onOKButtonClicked
  313. * 函数功能:OKButton点击槽函数,确定修改数据库
  314. * 输入参数:无
  315. * 输出参数:无
  316. * 返回数值:void
  317. * 创建人员:
  318. * 创建时间:2017-11-15
  319. * 修改人员:
  320. * 修改时间:
  321. **************************************************************************/
  322. void KSDemoDlg::onOKButtonClicked()
  323. {
  324. for (int i=0; i<m_infoEditList.count(); i++)
  325. {
  326. if (m_infoEditList[i]->text().isEmpty())
  327. {
  328. QMessageBox::warning(this, QStringLiteral("提示"), QStringLiteral("请将内容填写完整"), QMessageBox::Ok);
  329. return;
  330. }
  331. }
  332. switch (m_operator)
  333. {
  334. case INSERT:
  335. {
  336. if (QMessageBox::Ok == QMessageBox::warning(this, QStringLiteral("提示"), QStringLiteral("请确定是否增加"), QMessageBox::Ok|QMessageBox::No))
  337. {
  338. int col = m_model->columnCount();
  339. int row = m_model->rowCount();
  340. m_model->insertRow(row);
  341. for (int i=0; i<col; i++)
  342. {
  343. m_model->setData(m_model->index(row, i), m_infoEditList[i]->text());
  344. }
  345. m_model->submitAll(); //提交修改
  346. }
  347. }
  348. break;
  349. case UPDATE:
  350. {
  351. if (QMessageBox::Ok == QMessageBox::warning(this, QStringLiteral("提示"), QStringLiteral("请确定是否修改"), QMessageBox::Ok|QMessageBox::No))
  352. {
  353. int col = m_model->columnCount();
  354. int CurrentRow = m_TabView->currentIndex().row();
  355. for (int i=0; i<col; i++)
  356. {
  357. m_model->setData(m_model->index(CurrentRow, i), m_infoEditList[i]->text());
  358. }
  359. m_model->submitAll(); //提交修改
  360. }
  361. }
  362. break;
  363. default:
  364. break;
  365. }
  366. for (int i=0; i<m_infoEditList.count(); i++)
  367. {
  368. m_infoEditList[i]->setText("");
  369. m_infoEditList[i]->setEnabled(false);
  370. }
  371. m_model->select();
  372. m_OKButton.setEnabled(false);
  373. m_CancelButton.setEnabled(false);
  374. }
  375. /**************************************************************************
  376. * 函数名称:onCancelButtonClicked
  377. * 函数功能:OKButton点击槽函数,不操作
  378. * 输入参数:无
  379. * 输出参数:无
  380. * 返回数值:void
  381. * 创建人员:
  382. * 创建时间:2017-11-15
  383. * 修改人员:
  384. * 修改时间:
  385. **************************************************************************/
  386. void KSDemoDlg::onCancelButtonClicked()
  387. {
  388. for (int i=0; i<m_infoEditList.count(); i++)
  389. {
  390. m_infoEditList[i]->setText("");
  391. m_infoEditList[i]->setEnabled(false);
  392. }
  393. m_OKButton.setEnabled(false);
  394. m_CancelButton.setEnabled(false);
  395. }
  396. /**************************************************************************
  397. * 函数名称:~KsUserManageDlg
  398. * 函数功能:用户管理对话框析构函数
  399. * 输入参数:无
  400. * 输出参数:无
  401. * 返回数值:void
  402. * 创建人员:
  403. * 创建时间:2017-11-15
  404. * 修改人员:
  405. * 修改时间:
  406. **************************************************************************/
  407. KSDemoDlg::~KSDemoDlg()
  408. {
  409. qDebug() << "KSDemoDlg::~KSDemoDlg()";
  410. m_db.close();
  411. }
  412. main函数
  413. #include "KsTestDemo.h"
  414. #include <QtWidgets/QApplication>
  415. #include <QCoreApplication>
  416. #include "KSDemoDlg.h"
  417. int main(int argc, char *argv[])
  418. {
  419. QApplication a(argc, argv);
  420. KSDemoDlg dlg("CONFIG.db", "T_USER_MANAGE"); //这里我们在生成KSDemoDlg类的时候,在构造函数中传入sqlite数据库名CONFIG.DB和想要操作的表T_USER_MANAGE
  421. dlg.show(); //显示一下就OK
  422. return a.exec();
  423. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/946944
推荐阅读
相关标签
  

闽ICP备14008679号