1. 程式人生 > >小玩具——溫度採集專案(五)

小玩具——溫度採集專案(五)

2.登陸介面完成的框架搭建好後,怎麼實現呢?登陸,我是需要連線的資料庫的,我是學習了豆子老師的文章的

https://www.devbean.net/2013/06/qt-study-road-2-database/

不僅僅是看的資料庫的操作話,Qt的基本的概念也是看的豆子老師的哈。大家可以去看看哈。

比如Q_OBJECT,這個也讓我搞了好久,這個坑,也是在對話方塊這一部分的,差點忘記說了。要使用connect()函式來作為訊號-槽的橋樑,使用connect()函式,QObject::connect()這樣使用,要麼加上這個巨集Q_OBJECT,最好就是加上,而且加在標頭檔案上吧,它會在你qmake的時候生成moc檔案,這個好坑,我之前已經編譯過生成了一些.o .sourse 之檔案了,所以在我加上Q_OBJECT

給dialog的時候,一直報錯,而且還不是語法錯誤,我就清除,構建,再來一遍,還是錯,然後我就猜是再Debug裡面,它的一些檔案它選擇忽略不重新編譯,而導致我的dialog檔案不能編譯成moc檔案而發生的錯誤,所以我當然是把它全刪掉,然後重新qmake,編譯啦,結果當然是ok啦,還是老問題,我對編譯的過程不太清楚,所以得要在我瞭解了編譯的過程和機制後才好深究,深究才有意義。現在能解決問題就好。

好像扯遠了,我回來吧,說到資料庫。說到資料庫又是很多的辛酸淚。我使用的是mysql5.7.xx,後面是幾版忘記了,因為Qt是32位的,我之前在vs用的mysql64位不能用,然後解決問題無非就是兩個,64位的Qt 64位的mysql,32Qt 32mysql,我試過使用64位的,好像有亂碼,不怎麼好用,所以我選擇了再安裝32位的資料庫,有64位的配置經驗,應該不難。使用資料QT +=sql 再pro裡面新增這個,才能使用,使用mysql需要你有相應的驅動,這些都ok了,咱們就來寫程式碼吧。再幫助文件裡面,有一個完整的demo供咱們參考。

      QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
      db.setHostName("acidalia");
      db.setDatabaseName("customdb");
      db.setUserName("mojito");
      db.setPassword("J0a1m8");
      bool ok = db.open();
這個就是幫助文件裡面的demo,其實看函式的名字就能知道這個函式是幹啥的。
這個很簡單,重要的是,我們要操作資料庫,
QSqlQuery query(db);        //使用這個類可以使用SQL的語言
這個類可以幫助我們聯合sql語言進行程式設計開發
query.exec("create table UserMessage (user varchar(20) primary key,passward varchar(20))");
這個就相當於在控制檯敲下
create table UserMessage (user varchar(20) primary key,passward varchar(20));
這個程式碼了,如果控制檯沒有報錯則exec則返回true,報錯則位false。

我們可以使用

str = QString("insert into UserMessage values(%1,'%2','%3')").arg(0).arg("hehe").arg("123");
格式化語句,有了這些工具,就相當於我們直接在控制檯上編寫sql語言那樣了,接下來的事情就很簡單了,畢竟我們這裡沒有視覺化資料庫的資料,如果有人想要視覺化資料的話,可以引數豆子老師的文章,上面是有的。

我要建立兩張表,一張是存放使用者的賬號和密碼的,一個是存放採集到的資料和日期時間的。

這個就不多說了。要注意的一點就是,在不同的作用域,使用QSqlQuery的時候,在只調用一個數據庫的時候,會使用預設的上次使用的資料庫進行操作,也即,在其他作用域中

   QSqlDatabase db = QSqlDatabase::database("qt_sql_default_connection");
   QSqlQuery query(db);
也可以直接這樣寫:
QSqlQuery query();
相當於預設使用了 qt_sql_default_connection ,還是挺方便的。