赞
踩
尝试在Raspbian下开发直连MSSQL数据库的GUI应用程序,开发工具用的是QT Creator。
第一次用QT,决定定两个小目标,分两步走:
1、GUI的Hello World
2、在1的基础上Hello MSSQL
首先安装QT:
### 安装QT5 ###
sudo apt-get install qt5-default
sudo apt-get install qtcreator
sudo apt-get install qt-sdk
sudo apt-get install libqt5sql5-odbc
需要一点时间,保持耐心。
完成后在桌面环境中进入Qt Creator。需要做一些初始设置。工具-》选项-》构建和运行-》编译器。对于手动的C,添加-》GCC-》C;对于手动的C++,添加-》GCC-》C++。它们的编译器路径都选“/usr/bin/gcc”。建议此时分辨率尽可能高一些,否则有个“OK”按钮很容易被无视掉。
切回“构建套件(KIT)”。
然后就可以新建项目了,模板选“Qt Widgets Application”。
进入开发环境后,左侧有一个分类面板。拖拽控件画窗体的界面可以通过双击界面文件下的ui文件调出。
第一个小目标很容易达成,拖个按钮到空白窗体上,然后右键该按钮控件,转到槽(相当于事件),选中clicked,OK。熟悉的事件代码又出现了。
GUI弹框需要在cpp文件头部 #include <QMessageBox>。Qt弹框的代码是:QMessageBox::information(this,"DEMO","Hello World");
完了之后可以按Ctrl R运行看效果!
============= 我是第一个小目标的分割线 =============
为了实现第二个小目标,还需要下载一些ODBC驱动和开发工具。
sudo apt-get update
sudo apt-get install unixodbc unixodbc-bin unixodbc-dev
sudo apt-get install freetds-bin freetds-common freetds-dev tdsodbc
然后配置/etc/odbcinst.ini文件,默认情况下该文件是空的。
[MSSQL]
Description = MS SQL SERVER
Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
Setup = /usr/lib/arm-linux-gnueabihf/odbc/libtdsS.so
FileUsage = 1
client charset = GBK
方括号内的内容可以随便写,但是自己要记住,后续写代码时会用到。
第二个小目标定为,输入服务器IP、数据库名、用户名、密码等信息,GUI程序返回该数据库的@@Version信息。
参考界面如下:
编码中需要注意几个地方:
1、pro文件中需要在头部加一句:QT += sql
2、运行时密码框应该是星号,这可以在MainWindow的构造函数中加一句:ui->txtPWD->setEchoMode(QLineEdit::Password);
3、需要再include几个SQL相关的文件:
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
4、参考代码:
void MainWindow::on_btnMSSQL_clicked()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC3");
QString conn = QString("DRIVER={MSSQL};SERVER=%1;DATABASE=%2;UID=%3;PWD=%4;PORT=%5")
.arg(ui->txtSvr->text())
.arg(ui->txtDB->text())
.arg(ui->txtUID->text())
.arg(ui->txtPWD->text())
.arg(ui->txtPort->text());
db.setDatabaseName(conn);
if (!db.open())
{
QMessageBox::warning(this,"Warning",db.lastError().text());
return;
}
QSqlQuery q;
q.clear();
q.exec("select @@version");
while (q.next())
{
QMessageBox::information(this,"Hello World",q.value(0).toString());
}
db.close();
}
这样就可以测试了。一定要注意,连接字符串中端口号必须要提供!而且,Driver大括号里的名称就是odbcinst.ini里提到的。
== 补充:关于从数据库中获取的中文 ==
测试以上代码时用到的MSSQL数据库是中文版的,字符集排序等等都采用默认设置安装。做进一步测试时发现,按上文的写法中文是乱码。网上查了一些资料,尝试了一些方法,如QString::fromLocal8Bit函数等都不能完美解决。后来仔细查了一下Raspbian本身的配置,觉得可能问题出在locales上。试着改了一下设置,成功显示从数据库中查来的中文。
sudo raspi-config
4 Localisation Options -> I1 Change Locale -> 鼠标向下键一路按到底,稍微回过去几下,把zh_cn开头的那几个都选上,确定,然后将“zh_cn.UTF-8”作为默认locale。再次确定,稍等几分钟等它完成即可。或许要重启一下树莓派。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。