9、Qt Project之简单的数据库接口
简单的数据库接口
Step1:首先完成整个UI界面的额设计:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>313</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>320</x>
<y>220</y>
<width>51</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Insert</string>
</property>
</widget>
<widget class="QTextEdit" name="textEdit">
<property name="geometry">
<rect>
<x>80</x>
<y>220</y>
<width>51</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QTextEdit" name="textEdit_2">
<property name="geometry">
<rect>
<x>140</x>
<y>220</y>
<width>101</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QTextEdit" name="textEdit_3">
<property name="geometry">
<rect>
<x>250</x>
<y>220</y>
<width>61</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>100</x>
<y>200</y>
<width>31</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>ID</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>170</x>
<y>200</y>
<width>65</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>NAME</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>260</x>
<y>200</y>
<width>65</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>TEMP</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>20</x>
<y>110</y>
<width>171</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
<underline>false</underline>
<strikeout>false</strikeout>
</font>
</property>
<property name="cursor">
<cursorShape>BlankCursor</cursorShape>
</property>
<property name="text">
<string>Designed by : mm1994uestc</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>0</x>
<y>50</y>
<width>171</width>
<height>51</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
<italic>true</italic>
<underline>false</underline>
<strikeout>false</strikeout>
</font>
</property>
<property name="cursor">
<cursorShape>BlankCursor</cursorShape>
</property>
<property name="text">
<string>MySQL Control</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="label_6">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>321</width>
<height>51</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>28</pointsize>
<italic>true</italic>
<underline>false</underline>
<strikeout>false</strikeout>
</font>
</property>
<property name="cursor">
<cursorShape>BlankCursor</cursorShape>
</property>
<property name="text">
<string>Qt interface Demo!</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="label_7">
<property name="geometry">
<rect>
<x>20</x>
<y>220</y>
<width>51</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Insert:</string>
</property>
</widget>
<widget class="QLabel" name="label_8">
<property name="geometry">
<rect>
<x>20</x>
<y>160</y>
<width>51</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Search:</string>
</property>
</widget>
<widget class="QTextEdit" name="SearchInput">
<property name="geometry">
<rect>
<x>80</x>
<y>160</y>
<width>101</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_9">
<property name="geometry">
<rect>
<x>100</x>
<y>140</y>
<width>65</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>NAME</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>320</x>
<y>160</y>
<width>51</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Search</string>
</property>
</widget>
<widget class="QLabel" name="SearchRes">
<property name="geometry">
<rect>
<x>230</x>
<y>160</y>
<width>81</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Search Res</string>
</property>
</widget>
<widget class="QLabel" name="label_11">
<property name="geometry">
<rect>
<x>180</x>
<y>160</y>
<width>65</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>22</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>---></string>
</property>
</widget>
<widget class="QLabel" name="label_10">
<property name="geometry">
<rect>
<x>220</x>
<y>50</y>
<width>110</width>
<height>110</height>
</rect>
</property>
<property name="text">
<string> Cover</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>25</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
界面的设计如右图所示
我们能够分析功能,在search中填入内容之后,点击search按钮就会根据程序中定义使用的mysql数据库的数据库以及表进行数据的查询工作,并将查询的结果输出到右侧的lable当中。
Step2:根据上述分析的MySQ_UI的功能设计,完成槽函数的定义和实现:
首先需要添加sql的核心模块(关于sql模块的安装参考我的另一篇博客:http://www.cnblogs.com/uestc-mm/p/8920525.html):
QT += core gui sql
下面首先是mainwindow.h文件的内容,包含了头文件:#include <QSqlDatabase>、#include <QSqlQuery>这两个MySQL数据库需要使用到的头文件;
声明定义了SLOT槽函数:void on_pushButton_clicked(bool checked)、void on_pushButton_2_clicked()
定义了私有成员变量db: QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL")
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlQuery> namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked(bool checked);
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // define the db via
};
#endif // MAINWINDOW_H
接着在mainwindow.cpp文件中对变量db进行初始化和MySQL数据库进行连接, 并实现对应的槽函数:
void MainWindow::on_pushButton_clicked(bool checked)
{
QString ID,NAME,TEMP;
ID = ui->textEdit->toPlainText(); // Get the input content
NAME = ui->textEdit_2->toPlainText();
TEMP = ui->textEdit_3->toPlainText();
qDebug() << "ID:" << ID << " " << "NAME:" << NAME << " " << "TEMP:" << TEMP; qDebug() << "Aviliable SQL drivers!";
QStringList drivers = QSqlDatabase::drivers(); //Getting the support databases,if do not have the database driver,we can not use this databse
foreach(QString driver,drivers)
qDebug() << driver; if(!db.open()) // Connect to the database
{
qDebug() << "failed to connect to the mysql database!";
}
else
{
qDebug() << "Mysql is successfully Opened!";
} QSqlQuery query(db); //Create a new query for db,use query to change the content QString Command_insert[] = {"insert into ","GanSu","BeiJing"," values(",")"};
QString Command = "";
Command = Command_insert[]+Command_insert[]+Command_insert[]+ID+","+"\""+NAME+"\""+","+TEMP+Command_insert[]; // Combine the command qDebug() << Command; query.exec(Command); // excute the command to control the database
} void MainWindow::on_pushButton_2_clicked()
{
if(!db.open())
{
qDebug() << "failed to connect to the mysql database!";
}
else
{
qDebug() << "Mysql is successfully Opened!";
} QSqlQuery query(db);
QString name,command;
QString Command_search[] = {"select * from GanSu where name=","'"}; name = ui->SearchInput->toPlainText();
qDebug() << name;
command = Command_search[] + Command_search[] + name + Command_search[]; qDebug() << command; query.exec(command); while(query.next()) // wait for database finish the command just now
{
int val1 = query.value().toInt();
QString val2 = query.value().toString(); // Getting the content in the query!
int val3 = query.value().toInt();
qDebug() << val1 << val2 << val3; ui->SearchRes->setText(query.value().toString()+query.value().toString()+query.value().toString());
}
}
完成上述操作就可以编译运行Qt程序了。
9、Qt Project之简单的数据库接口的更多相关文章
- Qt Project的持续集成方案
作者:齐亮链接:http://www.zhihu.com/question/24314354/answer/27547787来源:知乎著作权归作者所有,转载请联系作者获得授权. PETER HARTM ...
- 在CentOS下面编译WizNote Qt Project
编译环境 CentOS 64位 Desktop 版本:6.5 编译前的准备: CentOS的用户默认没有root权限,如果当前用户没有权限root,则可以在终端里面执行下面的命令: su root s ...
- Qt WebKit and HTML5 geolocation | Qt Project forums | Qt Project
Qt WebKit and HTML5 geolocation | Qt Project forums | Qt Project Qt WebKit and HTML5 geolocation I ...
- DOM Traversal Example | Documentation | Qt Project
DOM Traversal Example | Documentation | Qt Project DOM Traversal Example
- 关于VS2017+Qt5.6.3(msvc2015_64)联合编程Qt project settings界面没有ok,cancel选项的问题
如题,我在项目开发的过程中,需要添加数据库模块SQL,然后发现VS上QT project settings选项中不能修改添加的模块,也就是对应QT creator中的在.pro文件中添加一句:QT + ...
- QT 选择对话框简单示例
QT 选择对话框简单示例 部分代码: pDialog->addSeparator(); QAction *pmb2 = pDialog->addAction(QString::fromLo ...
- qt project settings被禁用解决方案
转载请注明出处:http://www.cnblogs.com/dachen408/p/7422707.html qt project settings被禁用点击不了: 解决方案:需要点击该项目(或者项 ...
- 使用QT实现一个简单的登陆对话框(纯代码实现C++)
使用QT实现一个简单的登陆对话框(纯代码实现C++) 效果展示 使用的QT控件 控件 描述 QLable 标签 QLineEdit 行文本框 QPushButton 按扭 QHBoxLayout 水平 ...
- 使用qt制作一个简单的计算器
前言:今天使用qt制作了一个很简单的计算器,觉得挺有意思的,所以在这里跟大家分享一下. 这里先跟大家说说使用到的函数: 一.槽连接函数 connect(信号发送者,发送的信号,信号接收者,信号接收者的 ...
随机推荐
- 弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
自从 2011 年发布以来,Kotlin 凭借强大的功能在开发者中的欢迎程度与日俱增.且在一年前,Google 宣布 Kotlin 正式成为 Android 官方开发语言,由此引发了从 Java 迁移 ...
- swift 实践- 03 -- UILabel
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 标签 let ...
- swift 学习- 26 -- 泛型
// 泛型 代码能够让你根据自定义的需求,编写出适用于任意类型, 灵活可重用的函数以及类型, 它能让你避免代码的重复, 用一种清晰和抽象的方式来表达代码的意图 // 泛型是 Swift 最强大的特性之 ...
- Modbus库开发笔记之四:Modbus TCP Client开发
这一次我们封装Modbus TCP Client应用.同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能.我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用. 对于TCP客户端我们 ...
- Confluence 6 从一个 XML 备份中导入一个空间
有下面 2 中方法可以导入一个空间——通过上传一个文件,或者从你 Confluence 服务器上的一个目录中导入.上传文件仅仅是针对一个小站点的情况.为了取得最好的导入结果,我们推荐你从服务器上的目录 ...
- Confluence 6 用自带的用户管理
在一些特定的情况下,你可能希望禁用 Confluence 自带的用户管理或完全使用外部的用户目录进行用户管理.例如 Jira 软件或者 Jira Service Desk.你可以在 Confluenc ...
- error: js/dist/app.js from UglifyJs Unexpected token: name (Dom7)
What you did I have installed Swiper as normal dependency in my Project and import it to my scripts ...
- svn上check下来的项目,用idea打开,菜单栏没有svn工具解决办法
1.用idea打开你的项目(idea已经配置过小乌龟了) 2.菜单栏点击VCS,Enable Version Control Integration... 3.选择Subversion 4.这时候,菜 ...
- 前端基础之初识HTML
一.web服务的本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.b ...
- jacoco + eclipse单元测试覆盖率
概念 Jacoco:JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant.Maven中:可以作为Eclipse插件,可以使用其JavaAgent技术监控J ...