免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      Qt開發(fā)經(jīng)驗(yàn)小技巧226-230

      226. qtc開發(fā)工具內(nèi)置了不少的函數(shù),可以很方便的進(jìn)行一些判斷和處理。

      “`cpp

      //最小版本要求

      !minQtVersion(5, 15, 2) {

      message(“Cannot build Qt Installer Framework with Qt version ${QT_VERSION}.”)

      error(“Use at least Qt 5.15.2.”)

      }

      “`

      227. 有時(shí)候文本框中的內(nèi)容過長,而文本框默認(rèn)光標(biāo)在尾部,所以要主動(dòng)設(shè)置下將光標(biāo)移到最前面

      “`cpp

      //三種方法都可以

      ui->lineEdit->setSelection(0, 0);

      ui->lineEdit->setCursorPosition(0);

      //樣式表方式

      “QLineEdit{qproperty-cursorPosition:0;}

      “`

      228. 關(guān)于Qt瀏覽器模塊的幾點(diǎn)說明。

      – Qt5.6以前用的是webkit,Qt5.6版本以后分兩種情況,一種是mingw編譯器(windows系統(tǒng))對(duì)應(yīng)的Qt庫不再提供瀏覽器模塊。

      – Qt5.6以后的版本在linux系統(tǒng)和mac等系統(tǒng),都不存在沒有瀏覽器控件的情況,都使用的是webengine。

      – 僅僅是windows上的mingw編譯器的Qt版本沒有,其他系統(tǒng)其實(shí)都有的。很多人在這個(gè)地方都有疑問,都以為只有msvc編譯器有瀏覽器控件,其實(shí)確切的說是在windows上msvc的Qt庫帶瀏覽器控件。

      – 安裝Qt的時(shí)候webengine模塊默認(rèn)不勾選,需要主動(dòng)勾選才會(huì)安裝。

      – 也不是所有的msvc的Qt版本都有webengine瀏覽器模塊,哪怕你勾選了也沒用,有些版本官方并沒有編譯,需要自行編譯。需要到對(duì)應(yīng)的Qt安裝目錄查看是否有 Qt5WebEngine.dll 文件。

      – 如果僅僅是為了彌補(bǔ)mingw版本缺失瀏覽器模塊的遺憾,推薦用miniblink。

      – 如果為了統(tǒng)一兼容各種版本和系統(tǒng),推薦用cef。

      – 如果沒有歷史包袱,推薦用webengine,與Qt的集成度高。

      – webkit和miniblink默認(rèn)都不支持gpu,webengine默認(rèn)走gpu。

      – qwebengine默認(rèn)不支持MP4,需要自己重新編譯。

      229. 關(guān)于編譯數(shù)據(jù)庫插件的幾個(gè)經(jīng)驗(yàn)總結(jié)。

      – 安裝對(duì)應(yīng)的數(shù)據(jù)庫,安裝后會(huì)有include頭文件和lib鏈接庫文件,這是基本的前提,編譯數(shù)據(jù)庫插件必須要有這兩個(gè)東西。務(wù)必注意,32位的Qt必須安裝32位的數(shù)據(jù)庫才能正常編譯成功,位數(shù)要一致。

      – 準(zhǔn)備好數(shù)據(jù)庫插件源碼,比如qt-everywhere-src-5.14.2qtbasesrcpluginssqldriversmysql,可以在安裝Qt的時(shí)候勾選src,或者后期直接官網(wǎng)重新下載源碼解壓出來。

      – 打開你要編譯的數(shù)據(jù)庫插件源碼,比如mysql就打開mysql.pro,oracle就打開oci.pro。

      – 在pro中注釋掉一行 #QMAKE_USE += mysql,如果是oci項(xiàng)目則是#QMAKE_USE += oci。

      – qsqldriverbase.pri文件中注釋掉 #include(..shadowed(..PWD)/qtsqldrivers-config.pri)。

      – mysql.pro文件內(nèi)容下面加上如下代碼。

      “`cpp

      path = C:/Qt/mysql-5.7.30-winx64

      INCLUDEPATH += $path/include

      win32:LIBS += -L$path/lib -llibmysql

      “`

      – oci.pro文件內(nèi)容下面加上如下代碼。

      “`cpp

      path = C:/app/Administrator/product/11.2.0/client_1

      INCLUDEPATH += $path/oci/include

      win32:LIBS += -L$path/oci/lib/msvc -loci

      “`

      – psql.pro文件內(nèi)容下面加上如下代碼。

      “`cpp

      path = “C:/Program Files/PostgreSQL/13”

      INCLUDEPATH += $path/include

      win32:LIBS += -L$path/lib -llibpq

      “`

      – 以上寫法同時(shí)支持mingw和msvc,其他系統(tǒng)編譯過程也是類似。編譯完成后默認(rèn)會(huì)在你當(dāng)前源碼所在盤符的根目錄下,會(huì)出現(xiàn)plugins目錄,里面sqldrivers目錄下就是對(duì)應(yīng)編譯生成好的插件動(dòng)態(tài)庫。

      – 默認(rèn)oracle的插件驅(qū)動(dòng)代碼是按照oracle12的函數(shù)寫的,如果鏈接的是oracle11,則需要改動(dòng)兩行代碼才能編譯成功。打開qsql_oci.cpp文件大概在1559行代碼左右,有個(gè)OCIBindByPos2函數(shù)改成OCIBindByPos,下面還有一行bindColumn.lengths改成(ub2*)bindColumn.lengths。

      230. 關(guān)于Qt數(shù)據(jù)庫開發(fā)的一些冷知識(shí)。

      – Qt即支持庫的形式直接和數(shù)據(jù)庫通信,也支持ODBC數(shù)據(jù)源的形式和各種數(shù)據(jù)庫通信,這樣就涵蓋了所有的情況。

      – Qt數(shù)據(jù)庫程序打包發(fā)布,所有前提:注意區(qū)分32/64位,你的程序是32位的就必須帶上32位的庫,64位的必須帶上64位的庫,這點(diǎn)Qt的庫也是這個(gè)要求。mysql發(fā)布最簡單,帶上一個(gè)mysql的動(dòng)態(tài)庫文件就行(windows上的是libmysql.dll),非常簡單。sqlserver不用帶,因?yàn)槭俏④浀挠H兒子,一般操作系統(tǒng)自帶。postgres需要帶上libpq.dll、libintl-8.dll、libiconv-2.dll、libeay32.dll、ssleay32.dll這幾個(gè)文件就行。oracle需要帶上oci.dll、oraociei11.dll(這個(gè)文件很大有130MB+),如果不行建議直接安裝個(gè)oracle client客戶端軟件,然后對(duì)應(yīng)bin目錄設(shè)置到環(huán)境變量就好。

      – 打包發(fā)布后測(cè)試下來,發(fā)現(xiàn)32位的程序也可以正常連接64位的mysql,64位的程序也可以正常連接32位的mysql,因此判斷只要和程序的庫的位數(shù)一致就行(編譯的時(shí)候也是這個(gè)規(guī)則,32位的Qt程序編譯數(shù)據(jù)庫插件也要用32位的數(shù)據(jù)庫鏈接庫。),不需要和具體的數(shù)據(jù)庫的位數(shù)一致,測(cè)試過mysql、sqlserver、postgresql數(shù)據(jù)庫都是類似規(guī)則。

      – 大量測(cè)試對(duì)比下來,通過odbc數(shù)據(jù)源的方式和直連數(shù)據(jù)庫的方式批量插入大量數(shù)據(jù)記錄,直連方式速度更快,約5%左右,所以建議盡量采用此方式,是在沒有此方式的環(huán)境才采用odbc數(shù)據(jù)源的方式,Qt默認(rèn)自帶odbc數(shù)據(jù)庫插件。

      – 不同數(shù)據(jù)庫在執(zhí)行sql腳本的時(shí)候,會(huì)自動(dòng)將表名或者字段名轉(zhuǎn)成大寫或小寫,mysql會(huì)將表名轉(zhuǎn)成小寫、postgresql會(huì)將表名和字段名轉(zhuǎn)成小寫、oracle會(huì)將表名和字段名轉(zhuǎn)成大寫。這就導(dǎo)致使用QSqlTableModel調(diào)用setTable設(shè)置數(shù)據(jù)庫表名的時(shí)候,一定要和數(shù)據(jù)庫中的表名一致,區(qū)分大小寫,所以就是在對(duì)postgresql和oracle數(shù)據(jù)庫的時(shí)候一定要注意,本人就是在這里卡了很久,差點(diǎn)要把這巨大的屎盆扣在Qt的BUG上。

      “`cpp

      void DbHelper::bindTable(const QString &dbType, QSqlTableModel *model, const QString &table)

      {

      //postgresql全部小寫,oracle全部大寫,這兩個(gè)數(shù)據(jù)庫嚴(yán)格區(qū)分表名字段名的大小寫臥槽

      QString flag = dbType.toUpper();

      if (flag == “POSTGRESQL”) {

      model->setTable(table.toLower());

      } else if (flag == “ORACLE”) {

      model->setTable(table.toUpper());

      } else {

      model->setTable(table);

      }

      }

      “`

      – Qt支持不指定數(shù)據(jù)庫名打開數(shù)據(jù)庫,因?yàn)橛袝r(shí)候是要在連接數(shù)據(jù)庫服務(wù)器后,執(zhí)行sql語句創(chuàng)建數(shù)據(jù)庫。數(shù)據(jù)庫都還沒存在怎么連接呢,測(cè)試發(fā)現(xiàn)sqlite、mysql、sqlserver、postgresql都支持這個(gè)特性。在刪除和創(chuàng)建數(shù)據(jù)庫的前提是該數(shù)據(jù)庫沒有被其他程序占用,比如其他程序已經(jīng)打開了該數(shù)據(jù)庫則會(huì)執(zhí)行失敗。這里我就折磨過很多次,為什么執(zhí)行失敗呢?后面發(fā)現(xiàn)第三方數(shù)據(jù)庫工具已經(jīng)打開了該數(shù)據(jù)庫,把工具關(guān)掉就ok了。

      “`cpp

      QSqlDatabase database = QSqlDatabase::addDatabase(“QMYSQL”);

      //database.setDatabaseName(“dbtool”);

      database.setHostName(“127.0.0.1”);

      database.setPort(3306);

      database.setUserName(“root”);

      database.setPassword(“root”);

      if (database.open()) {

      QSqlQuery query(database);

      qDebug() << "刪除數(shù)據(jù)庫" << query.exec("drop database dbtool");

      qDebug() << "創(chuàng)建數(shù)據(jù)庫" << query.exec("create database dbtool");

      if (query.exec(“select * from userinfo”)) {

      while (query.next()) {

      qDebug() << "查詢數(shù)據(jù)庫" << query.value(0);

      }

      }

      } else {

      qDebug() << "打開數(shù)據(jù)庫" << database.lastError().text();

      }

      “`

      – 用QSqlQueryModel+QTableView顯示數(shù)據(jù),int類型的數(shù)據(jù),如果超過100萬,會(huì)變成科學(xué)計(jì)數(shù)顯示,這就很惱火了,肯定不是自己想要的結(jié)果。找遍網(wǎng)絡(luò)搜索,終于找到一個(gè)同樣問題的哥們,需要對(duì)這一列加個(gè)空的委托就行。后面發(fā)現(xiàn)空委托也不行,超過1000萬條又屌樣了,需要終極大法重載數(shù)據(jù)模型顯示。

      “`cpp

      ui->tableView->setItemDelegateForColumn(0, new QItemDelegate);

      //下面是終極大法

      QVariant SqlQueryModel::data(const QModelIndex &index, int role) const

      {

      QVariant value = QSqlQueryModel::data(index, role);

      //超過100萬的數(shù)值會(huì)被科學(xué)計(jì)數(shù)顯示需要這里轉(zhuǎn)成字符串顯示

      if (role == Qt::DisplayRole) {

      int result = value.toInt();

      if (result >= 1000000) {

      value = QString::number(result);

      }

      }

      return value

      }

      “`

      – mysql數(shù)據(jù)庫有多種數(shù)據(jù)庫引擎,其中MyIsam不支持?jǐn)?shù)據(jù)庫事務(wù),默認(rèn)一般是這個(gè)引擎,所以當(dāng)你使用Qt中的transaction方法后commit提交時(shí)候,會(huì)發(fā)現(xiàn)不成功,其實(shí)事實(shí)上又是成功的,去數(shù)據(jù)庫里面查看對(duì)應(yīng)的結(jié)果又是正確的。有兩個(gè)辦法,第一就是將數(shù)據(jù)庫引擎改成InnoDB,第二就是在提交后做個(gè)錯(cuò)誤判斷 if (database.commit() || !database.lastError().isValid()) ,錯(cuò)誤不可用也說明是成功的。

      – 如果采用odbc數(shù)據(jù)源通信,則只需設(shè)置數(shù)據(jù)庫名稱setDatabaseName、設(shè)置用戶名稱setUserName、設(shè)置用戶密碼setPassword這三個(gè)參數(shù)即可,因?yàn)閿?shù)據(jù)源配置的時(shí)候就已經(jīng)設(shè)置好對(duì)應(yīng)的主機(jī)地址和端口以及關(guān)聯(lián)的數(shù)據(jù)庫名稱,所以在用odbc數(shù)據(jù)源通信的時(shí)候只需要再次驗(yàn)證用戶信息即可。這里特別要注意的是setDatabaseName設(shè)置數(shù)據(jù)庫名稱要填寫數(shù)據(jù)源配置的名稱。

      – 經(jīng)過大量的對(duì)比測(cè)試,包括插入、刪除、批量、查詢、分頁等操作,千萬量級(jí)數(shù)據(jù),在Qt數(shù)據(jù)庫部分響應(yīng)速度這塊,友好度排名依次是 sqlite > postgresql > oracle > mysql > odbc 。千萬量級(jí)以上是 postgresql > oracle > mysql > sqlite > odbc 。億級(jí)別以上是 oracle > postgresql > 其他。以上測(cè)試均建立在初學(xué)者水平基礎(chǔ)上,至于分庫分表、聯(lián)合查詢、緩存、內(nèi)存數(shù)據(jù)庫等各種高級(jí)知識(shí)點(diǎn)沒用上。

      – mysql主要有兩個(gè)版本,mysql5.7和mysql8,官方說是8比5要快很多,個(gè)人測(cè)試下來,5.7比8要快很多,無論是查詢,還是批量插入數(shù)據(jù),不知道為何,網(wǎng)上搜索的也是這個(gè)結(jié)果([https://www.coder4.com/archives/7596](https://www.coder4.com/archives/7596)),大家都說8慢了很多。

      – mysql有個(gè)分支叫mariadb,比mysql更純正,據(jù)說各方面都吊打mysql([https://blog.csdn.net/x275920/article/details/123847792](https://blog.csdn.net/x275920/article/details/123847792)),個(gè)人對(duì)比測(cè)試下來也是確實(shí)批量插入和查詢性能要好不少,并且完全兼容mysql,甚至庫文件直接重命名也可以直接使用,比如將libmariadb.dll改成libmysql.dll可以直接使用,而且體積還小了八倍,這個(gè)好,發(fā)布的時(shí)候又少了好幾兆。

      – 如果是Qt+mysql程序,發(fā)布的時(shí)候帶的庫版本要和插件對(duì)應(yīng)數(shù)據(jù)庫版本一致,否則可能沒有數(shù)據(jù)庫事務(wù)特性,database.driver()->hasFeature(QSqlDriver::Transactions)為假。

      – QSqlTableModel封裝的非常好,并不會(huì)一次性加載所有數(shù)據(jù),而是隨著滾動(dòng)條的拉動(dòng)加載需要的數(shù)據(jù),測(cè)試一億條的表,速度非???,和幾千條的表速度一樣。

      – 在連接網(wǎng)絡(luò)數(shù)據(jù)庫的時(shí)候,如果你本地網(wǎng)絡(luò)設(shè)置了代理,比如使用了代理上github等網(wǎng)站,就會(huì)發(fā)現(xiàn)Qt的數(shù)據(jù)庫程序連不上,你需要設(shè)置下不使用本地代理設(shè)置 QNetworkProxyFactory::setUseSystemConfiguration(false) 。這個(gè)地方如果不仔細(xì)會(huì)找問題找到你懷疑人生。

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
      (0)
      用戶投稿
      上一篇 2022年7月5日 17:57
      下一篇 2022年7月5日 17:57

      相關(guān)推薦

      • 《秦始皇》快速升級(jí)打怪篇

        “馬嘶殘?jiān)聣?,笳鼓萬軍營,揮劍決浮云,諸侯盡西來?!?月26日《秦始皇》新服即將來臨,作為一款國戰(zhàn)類型游戲,等級(jí)便是實(shí)力的象征,那么在游戲中應(yīng)該如何升級(jí)呢,讓我們一起去看看吧。 我…

        2022年8月26日
      • iOS 16 推送更新,可以升級(jí)了

        今日凌晨,蘋果推送了 iOS 16 的第七個(gè)測(cè)試版系統(tǒng),距離上個(gè)測(cè)試版發(fā)布相隔一周左右,本次更新版本號(hào)為 20A5356a,版本號(hào)以 a 結(jié)尾,也意味著 RC 版已經(jīng)不遠(yuǎn)了。 此前…

        2022年8月25日
      • 當(dāng)我從華為換到小米之后,我后悔了嗎?

        前段時(shí)間,我的華為mate30pro摔破了屏幕,維修需要一千六百多。想著華為也用兩年了,干脆換一臺(tái)新的手機(jī)。 由于華為的拍照我實(shí)在喜歡不上,就想換臺(tái)拍照牛X一點(diǎn)的手機(jī),剛好三月底小…

        2022年7月4日
      • 說累了!做功課選的涂抹面就是不一樣

        說累了!做功課選的涂抹面就是不一樣 別不信,做功課選的涂抹面膜就是行 之前老是跟風(fēng)用來用去也沒找到適合和自己的 現(xiàn)在都是做完功課才入的 已經(jīng)挑出來經(jīng)驗(yàn)了,使用感受都標(biāo)注出來了 #涂…

        2022年6月30日
      • Linux下文件內(nèi)容更新了文件夾時(shí)間戳卻沒變?

        在日常多人協(xié)作時(shí),最開始習(xí)慣看文件夾更新時(shí)間來查看是否有更新,但發(fā)現(xiàn)總是不能如實(shí)反映情況, 文件夾日期有時(shí)變,有時(shí)不變。很是困惑,就來探究下。 比如,起始狀態(tài): ysx@local…

        2022年6月22日
      • 野獸出擊!Kingston FURY野獸系列DDR5 RGB內(nèi)存評(píng)測(cè)

        在英特爾最新推出的12代智能酷睿系列處理器帶動(dòng)下,電腦平臺(tái)的硬件也進(jìn)行了新一輪的迭代,其中內(nèi)存也由目前主流DDR4迭代成性能更高的DDR5時(shí)代。 加之隨著新硬件平臺(tái)的不斷普及,與之…

        2022年6月25日
      • Chrome(谷歌瀏覽器)如何截屏整個(gè)頁面不用插件

        Chrome(谷歌瀏覽器)如何截屏整個(gè)頁面不用插件?相信很多朋友們也遇到過這種類似的問題,那么對(duì)于這類問題如何解決呢?下面就把解決這種問題的方法給大家分享一下,希望可以幫助到大家。…

        2022年5月1日
      • 《仙劍7》PS4

        《仙劍奇?zhèn)b傳7》PS4|5版今日正式發(fā)售,普通版售價(jià)238港元,豪華版398港元。PlayStation港服商店頁面>>>> 《仙劍奇?zhèn)b傳7》是國產(chǎn)單機(jī)系列…

        2022年8月5日
      • 臉上有斑?20 歲初嘗皮秒祛斑

        【社區(qū)熱議】第 12 期。欄目內(nèi)容選自「丁香醫(yī)生 App」中大家都在關(guān)注的泛健康內(nèi)容,內(nèi)容可討論空間大、熱評(píng)也有趣犀利。期待下一次你的分享也可以在欄目中出現(xiàn)。 愛美之心,人皆有之?!?/p>

        2022年6月25日
      • 科學(xué)證明,膚質(zhì)不同變白方式也不同,內(nèi)調(diào)能讓皮膚通透,潔白無瑕

        膚質(zhì)不同,變白方式也不同。 大家都知道,每個(gè)人的皮膚狀況都是不一樣的,所以通過內(nèi)調(diào)變白方式也不同. 下邊就為大家講解一下不同膚質(zhì)問題如何內(nèi)調(diào)才能達(dá)到皮膚通透,潔白無瑕 1.斑點(diǎn)多 …

        2022年6月10日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息