① qt4.8.5build debug libraries 編譯有什麼用
QT Debug大集合 詳細講解是本文要介紹的內容,相信友們應該在編程過程中遇到各種各樣的Debug,先來看內容。QT Debug集錦~ 這篇是在10年測試QT 過程中遇到的問題:
1、中文顯示問題:
#include <QApplication> #include <QLabel> #include <QTextCodec> int main(int argc, char* argv[]) { QApplication app(argc,argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QLabel *label = new QLabel(tr("這里是中文")); label->Show(); return app.exec(); }
編譯代碼,得到的錯誤是: 'tr'在此作用域中尚未聲明。
昨天為什麼沒有出現這種錯誤呢?因為昨天的代碼是從qt creator生成的MainWindow中挑出來的,tr被聲明為QObject的一個static方法,因此在MainWindow中使用tr不會有問題。
把上面的QLabel *label=new QLabel(tr("這里是中文"));
改為
QLabel *label=new QLabel(QObject::tr("這里是中文"));
2、中文問題:
使用sqlite資料庫顯示亂碼的問題
本人近日在使用QT進行sqlite資料庫編程時,出現中文數據顯示亂碼情況,附源碼如下:
//main.cpp #include <QtGui> #include <QtCore/QTextCodec> #include <QSqlTableModel> #include <QTableView> #include <QHeaderView> #include <QSqlRecord> #include <QtGui/QLabel> #include <QString> #include <QVariant> #include "connection.h" #include "sql.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); //創建資料庫連接 if (!createConnection()) return 1; //創建學生信息表 createTables(); //初始添加數據 addData(); enum{ Student_Id = 0, Student_Schnum = 1, Student_Name = 2, Student_Sex = 3, Student_Nation = 4 }; QSqlTableModel *model = new QSqlTableModel(); model->setTable("student"); model->setSort(Student_Schnum, Qt::AscendingOrder); model->setHeaderData(Student_Schnum, Qt::Horizontal, QObject::tr("學號")); model->setHeaderData(Student_Name, Qt::Horizontal, QObject::tr("姓名")); model->setHeaderData(Student_Sex, Qt::Horizontal, QObject::tr("性別")); model->setHeaderData(Student_Nation, Qt::Horizontal, QObject::tr("民族")); model->select(); QTableView *view = new QTableView; view->setModel(model); view->setSelectionMode(QAbstractItemView::SingleSelection); view->setSelectionBehavior(QAbstractItemView::SelectRows); view->setColumnHidden(Student_Id, true); view->resizeColumnsToContents(); view->setEditTriggers(QAbstractItemView::NoEditTriggers); QHeaderView *header = view->horizontalHeader(); header->setStretchLastSection(true); view->show(); return a.exec(); } //connection.h #ifndef CONNECTION_H #define CONNECTION_H #include <QMessageBox> #include <QSqlDatabase> #include <QSqlError> #include <QSqlDriver> inline bool createConnection() { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("sim.dat"); if (!db.open()) { QMessageBox::warning(0, QObject::tr("Database Error"), db.lastError().text()); return false; } return true; } #endif // CONNECTION_H //sql.h #include <QSqlQuery> #ifndef SQL_H #define SQL_H inline void createTables() { QSqlQuery query; query.exec("CREATE TABLE student (" "id INTEGER PRIMARY KEY, " "schnum INTEGER NOT NULL, " "name VARCHAR(40) NOT NULL, " "sex VARCHAR(4) NOT NULL, " "nation VARCHAR(10) NOT NULL)"); } inline void addData(){ QSqlQuery query; for(int i =0;i<100;i++){ query.exec("INSERT INTO student (schnum, name, sex, nation) VALUES (2614103, '天殘腳,'男', '漢族')"); } } #endif // SQL_H
上網查了許多無果,後來在閱讀一篇技術文章中無意發現,原來在插入數據語句若有中文必須先QObject::tr()一番,即進行編碼,
將 Sql.h 中 query.exec("INSERT INTO student (schnum, name, sex, nation) VALUES (2614103, '天殘腳,'男', '漢族')"); 改為如下 query.exec(QObject::tr("INSERT INTO student (schnum, name, sex, nation) VALUES (2614103, '天殘腳,'男', '漢族')"));
結果在顯示中都能得正確顯示。
注意,如果語句 QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));中的編碼改為utf-8則會顯示亂碼。
3、中文問題:
如果使程序只支持一種編碼,也可以直接把整個應用程序的編碼設置為GBK編碼, 然後在字元串之前 加
tr(QObject::tr), qApp->setDefaultCodec( QTextCodec::codecForName("GBK") ); QLabel *label = new QLabel( tr("中文標簽") );
4、找不到<QtSql >
求助:提示無法打開包含文件QtSql
.Pro文件里加入 QT += sql
4、No rule to make target 'mkspecs/default/qmake.conf', needed by `Makefile'. Stop. 錯誤
mingw32-make: *** No rule to make target `http://www.cnblogs.com/http://www.cnblogs.com/Qt/4.3.3/mkspecs/default/qmake.conf', needed by `makefile'. Stop. make[2]: Entering directory `/home/lzy/tps2/rplan/super' make[2]: *** No rule to make target `/home/lzy/qt/qt-3.3.2/mkspecs/default/qmake.conf', needed by `Makefile'. Stop. make[2]: Leaving directory `/home/lzy/tps2/rplan/super'
5、mingw32\bin\ld.exe: cannot find -lqtmaind錯誤
這個錯誤是缺少某些庫,將mingw重新下載安裝即可。
6、編譯時可能會遇到如下錯誤:previous declaration 'long int InterlockedIncrement(long int*)' here
此為qt的bug需要修改源代碼 (Qt\4.4.3\src\corelib\arch\qatomic_windows.h),原文件如下:
Solution:
(1) Qt\4.4.3\src\corelib\arch\qatomic_windows.h:
#if !(defined Q_CC_BOR) || (__BORLANDC__ < 0x560) extern "C" { __declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long); __declspec(dllimport) long __stdcall InterlockedIncrement(long *); __declspec(dllimport) long __stdcall InterlockedDecrement(long *); __declspec(dllimport) long __stdcall InterlockedExchange(long *, long); __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long *, long); } #else extern "C" { __declspec(dllimport) long __stdcall InterlockedCompareExchange(long volatile*, long, long); __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile*); __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile*); __declspec(dllimport) long __stdcall InterlockedExchange(long volatile*, long); __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long volatile*, long); } #endif you will see above code in Qt\4.4.3\src\corelib\arch\qatomic_windows.h: file. I modified like below and it works. /*#if !(defined Q_CC_BOR) || (__BORLANDC__ < 0x560) extern "C" { __declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long); __declspec(dllimport) long __stdcall InterlockedIncrement(long *); __declspec(dllimport) long __stdcall InterlockedDecrement(long *); __declspec(dllimport) long __stdcall InterlockedExchange(long *, long); __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long *, long); } #else */ extern "C" { __declspec(dllimport) long __stdcall InterlockedCompareExchange(long volatile*, long, long); __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile*); __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile*); __declspec(dllimport) long __stdcall InterlockedExchange(long volatile*, long); __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long volatile*, long); } // #endif
7、編譯錯誤,顯示 can not find -lqtmaind。
這是qt的debug庫,安裝完成後需要再自己編譯這個庫。在Qt的開始菜單中,你可以找到一個程序 Qt 4.4.0 (Build Debug Libraries),運行這個程序就能編譯Qt的Debug庫了。
小結:QT debug大集合 詳細講解的內容介紹完了,希望本文對你有搜幫助。
② qt資料庫 qsqlquerymodel中setheaderdata怎麼設置中文
Qt資料庫 QSqlQueryModel實例操作 上篇是本文要介紹內容中一節,分為上下篇。在上一篇的最後我們說到,Qt中使用了自己的機制來避免使用SQL語句,它為我們提供了更簡單的資料庫操作和數據顯示模型。它們分別是只讀的QSqlQueryModel,操作單表的QSqlTableModel和以及可以支持外鍵的QSqlRelationalTableModel。這次我們先講解QSqlQueryModel。
QSqlQueryModel類為SQL的結果集提供了一個只讀的數據模型,下面我們先利用這個類進行一個最簡單的操作。
我們新建Qt4 Gui Application工程,我這里工程名為queryModel ,然後選中QtSql模塊,Base class選
③ python三本經典書籍都是什麼
《深度學習入門》([ 日] 齋藤康毅)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接: https://pan..com/s/1ddnvGv-r9PxjwMLpN0ZQIQ
書名:深度學習入門
作者:[ 日] 齋藤康毅
譯者:陸宇傑
豆瓣評分:9.4
出版社:人民郵電出版社
出版年份:2018-7
頁數:285
內容簡介:本書是深度學習真正意義上的入門書,深入淺出地剖析了深度學習的原理和相關技術。書中使用Python3,盡量不依賴外部庫或工具,從基本的數學知識出發,帶領讀者從零創建一個經典的深度學習網路,使讀者在此過程中逐步理解深度學習。書中不僅介紹了深度學習和神經網路的概念、特徵等基礎知識,對誤差反向傳播法、卷積神經網路等也有深入講解,此外還介紹了深度學習相關的實用技巧,自動駕駛、圖像生成、強化學習等方面的應用,以及為什麼加深層可以提高識別精度等「為什麼」的問題。
作者簡介:
齋藤康毅
東京工業大學畢業,並完成東京大學研究生院課程。現從事計算機視覺與機器學習相關的研究和開發工作。是Introcing Python、Python in Practice、The Elements of Computing Systems、Building Machine Learning Systems with Python的日文版譯者。
譯者簡介:
陸宇傑
眾安科技NLP演算法工程師。主要研究方向為自然語言處理及其應用,對圖像識別、機器學習、深度學習等領域有密切關注。Python愛好者。
④ QtSql編程RedHat linux系統下oracle資料庫中文亂碼
首先確認你的NLS_LANG環境變數是AMERICAN_AMERICA.US7ASCII,拼寫無誤
統一編碼設置:
統一GBK編碼(gbk或gb18030)
QTextCodec*gbkTC=QTextCodec::codecForName("gbk");
QTextCodec::setCodecForTr(gbkTC);
QTextCodec::setCodecForLocale(gbkTC);
QTextCodec::setCodecForCStrings(gbkTC);
統一UTF8編碼(utf-8或utf8)
QTextCodec*utg8TC=QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForTr(utg8TC);
QTextCodec::setCodecForLocale(utg8TC);
QTextCodec::setCodecForCStrings(utg8TC);編碼轉換/前提也是要設置默認編碼,然後針對來源字元串的編碼進行轉換,例如:
QTextCodec*gbkTC=QTextCodec::codecForName("gb18030");
QTextCodec*utg8TC=QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForTr(gbkTC);
QTextCodec::setCodecForLocale(gbkTC);
QTextCodec::setCodecForCStrings(gbkTC);
1.UTF-8轉換GBK
QStringUTF2GBK(QStringutfStr)
{
returngbkTC->toUnicode(utfStr.toLocal8Bit());
}
2GBK轉換UTF-8
QStringGBK2UTF(QStringgbkStr)
{
returnutg8TC->toUnicode(gbkStr.toUtf8());
}
⑤ Qt 訪問mysql
按照這三點順序:
1.#include <QtSql/QMYSQLDriver>去掉
然後重新運行程序
根據提示
2.如果找不到QMYSQL驅動,那麼你需要先編譯這個驅動。先到Plugins/SqlDriver下看看有沒有qsqlmysql.*與qsqlmysqld.*的動態庫文件。
如果沒有,說明你沒有編譯mysql驅動插件。如果有但是連不上驅動,說明你的動態庫沒有放在程序的目錄下(實質是沒有放在程序可搜索的目錄里),把這些動態庫放在程序目錄,不要少mysql的動態庫(這個不是QT編譯的那個QSQLMSQL的那個,是MYSQL自己的都太庫)。
3.編譯mysql驅動插件。
打開你的QT助手(Qt Assistant),查找這個「SQL Database Drivers」。裡面有編譯的方法。
注意了這個編譯需要你提供MySql的頭文件和庫文件。你說的mysql.h即mysql的頭文件了。如果你沒有,去下載MYSQL的SDK。
⑥ 我在MySql中創建了中文名字的資料庫和表,用Qt5.5連接不上,錯誤顯示一串的亂碼,我的MysQL都是utf8
換個高點的QT版本試試。
你的mysql是什麼版本的?