树莓派3B:桌面环境下用QTCreator开发直连MSSQL的GUI应用程序

尝试在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。再次确定,稍等几分钟等它完成即可。或许要重启一下树莓派。






猜你喜欢

转载自blog.csdn.net/ki1381/article/details/77884759
今日推荐