久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3029|回復: 0
打印 上一主題 下一主題
收起左側

QT上位機編寫

[復制鏈接]
跳轉到指定樓層
樓主
ID:140343 發表于 2016-9-25 11:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  前段時間終于把設備管理上位機完成的差不多了,用了差不多有半個月的時間了,因為對QT還不是特別的熟悉,所以中間還是摸索QT的過程。這個上位機程序用到了多線程,數據庫操作,網絡套接字還有一些界面操作。使用的IDE我選用的是QT CREATOR,個人覺得還是很好用的,里面集成了QT DESIGNER,QT HELP,,QT DEBUG(雖然暫時我還沒用過調試器,都是使用Qdebug打印信息和QMesseageBox輸出對話框來調試的),QT CREATOR編輯環境也是相當不錯的,特別是自動補全功能,呵呵不用記那么多類了,還有對類和函數或對象F1可以看到幫助文檔,但是有個前提就是這個類的頭文件你必須聲明正確,而卻你的對象函數也必須寫正確了,否則就看不到文檔了。在編寫過程也碰到了很多問題,現在就回憶一遍吧。


問題1:在多線程的編寫中,我們都知道run()里面的函數對象都是在新線程中運行的,那么新線程怎么和老線程交互。
答案:編寫多線程類的時候,我們把需要和主線程交互的對象放在線程類中,這樣在主線程類中定義一個線程類對象,這樣主線程可以訪問這個線程類的對象,當然如果是直接訪問,那就要這個對象是PUBLIC的了,如果不是就要通過線程類對象函數了。同時run因為是線程類的成員函數,那么他也可以訪問同一個對象的成員。所以線程類對象的這個成員變量就相當于多線程的共享變量了,所以我們要互斥訪問,我們可以在線程類里面定義一個鎖。

問題2:窗口操作只能運行于主線程(可能原因為窗口需要QApplication的支持,而QApplication是定義在主線程中的,窗口運行在主事件循環中,而次線程的exec只是屬于它的次線程循環)。當在次線程中QMessageBox();錯誤如下: ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel/qwidget.cpp, line 1069 QObject::killTimers: timers cannot be stopped from another thread。我想要在此線程做了某個操作后就彈出個對話框進行提示,那該怎么辦。、
答案:既然主線程負責窗口操作,那么我們就把這個事交給主線程來做。我是在次線程中emit一個信號,而這個信號連接的槽運行在主線程中,所以讓這個槽來QMessageBox;這也說明了,如果一個功能在一個地方運行不了,那么我們可以通過信號槽機制使得它在別的地方運行,不能運行的地方拋信號,能運行的地方定義槽,信號和槽進行合適的連接,一般在構照函數中(對象的開始函數哦)。在help文檔中有一句The main event loop receives events from the window system and dispatches these to the application widgets. Generally speaking, no user interaction can take place before calling exec(). 也就是說一切的窗口操作事件都是由a.exec分配的,分配到各個子窗口部件中的。

問題3:程序運行時候出現window runtime error,
答案:一般這個都是內存訪問不當造成的,訪問越界,訪問非法數據等等,我的問題是我定義了一個QBitArray ba;然后直接ba.setbit(5,0);因為ba的一開始空間為0,所以setbit導致內存覆蓋。所以我要使用的時候必須ba.setsize(size)才可以。

問題4:使用query創建表的時候表名不能以數字開頭,而且不能數字和字母多次混合,例如下面的表名老是會報語法錯誤。錯誤表名: 20060801 錯誤原因:不能以數字開頭 W2006w0801 錯誤原因:數字和字母不能多次混合正確表名; W20060801既字母+數字。
答案:我的表名就以字母開頭吧,呵呵,當然廢話,怎么搞想一切辦法啊。

問題5:網絡連接,連接不上主機時候,(意思就是說ping不通主機的時候)老長時間等待,又找不到QsqlSocket的阻塞機制,長時間等待會使得用戶覺得程序當了
答案:,所以最后我使用了一個定時器,一連接時候就定時,4秒沒有連接上的會就提示連接失敗,這個時間也可以調小一點的。連接上的 話,這個定時器就什么都不做,和定時器的協調時通過一個標志變量來完成的。

問題6:操作數據庫的時候查詢很慢,一開始是使用QsqlQuery+QTableWidget就是建立了索引還是好慢
答案:改成QtableModel+QTableView快多了,一萬條的記錄秒殺。所以說還是要清楚你使用的工具啊,QT的這個工MODEL類很好很強大。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线一区二区三区 | 超碰在线观看97 | 午夜视频在线观看一区二区 | 国产日韩欧美精品一区二区三区 | 日韩一区二区三区视频 | 亚洲日本视频 | 日韩 国产 在线 | 欧美乱人伦视频 | 久久精品国产久精国产 | 免费黄网站在线观看 | 日本一区二区三区在线观看 | 国产精品色哟哟网站 | 国产免费观看一区 | 精品一级毛片 | 久在线| 午夜精品一区二区三区在线视频 | 一级毛片免费看 | 久久黄色精品视频 | 欧洲精品一区 | 一区二区三区国产在线观看 | 精品一区二区三区免费毛片 | 国产日韩欧美精品一区二区 | 成人免费看黄网站在线观看 | 亚洲啊v在线 | 成年人的视频免费观看 | 午夜视频免费在线观看 | 亚洲欧美成人 | 国产三级一区二区 | 午夜一区 | 国产a区 | 一本一道久久a久久精品蜜桃 | 欧美日韩一区精品 | 精产国产伦理一二三区 | 久久久久国产精品午夜一区 | 中文字幕乱码一区二区三区 | 中文二区| 99久久久国产精品免费消防器 | 黄色网址av | 亚洲逼院 | 欧美一区二区在线观看 | 青青草免费在线视频 |