① 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是什么版本的?