QT问题集锦从学习Qt遇到的各种问题.docx
《QT问题集锦从学习Qt遇到的各种问题.docx》由会员分享,可在线阅读,更多相关《QT问题集锦从学习Qt遇到的各种问题.docx(19页珍藏版)》请在冰点文库上搜索。
QT问题集锦从学习Qt遇到的各种问题
第一篇初级问题
1用Qt4.8.5打不开冯工柏菲软件
专业版+DebugingTools
问题描述:
运行环境为Qt4.8.5+QtCreator3.0.0+VS2010
forWindows(x86),用Creator无法打开项目文件,截图如下:
弹出错误:
CannotreadE:
/PROJECT/Zhou-0410/testToolbar.pro:
Unexpected
UTF-8BOM
原因分析:
未知
解决方法:
1安装VS2010SP1,未解决
2安装VS-Add,未解决
3使用Creator2.6解决
2编译失败,系统找不到指定路径
问题描述:
见下图
aar9TF33EMBMFtmufldktr**■「
W匿受去占完"矗&护上聪专*「
2i:
51l24£正总比芒]hEHCigiiAJ:
FlleiS(j*2€i.i-dHizzM^f匚V15JE13匚Libi.口ID-2>■■.CBIBfmite.eaeH
■Ds-M'aogsiiiFilatv|XhLiezcaafT.Tl>ua.l10.DV712\BIE1'>shaju.mq19-CHAfaCLla.lNibjg!
_■L.i:
-4.=.~J;..Utt-ffmiZCMl.■MUTIJ:
-fiQT_DLL■BgN^_DU^BHLfWXu.D@T_QLL.-
WTSUI_WB-wrCeM:
_lJB-呻口砂IEJfflfli-aQT_}flVE=S5£■冷」HXITEJCTOXT■曄严西二适Eh-I^^TTO^^JWPCsCT-I«c3.i7&\vS>aiaxj.iKl^dh\grt^»BH占*甘胃盘首丄曲*.曲diuia'^j.-工■匸=£軒\■二百■轨右久-!
■==
・■・»XVAJOSOXiMAuMX^WvhRuv".I-l«ltSK4T\>>rl*1MriXqflaL»»r&«Xp«reShh"-1*«i
%QcXe3K-C・D・2\ffrtE-T"t.Mbas-Otani"-I-gs'MJsM:
・C,=YT3^[Jl・\:
LiKJ1EHlu'iiJiGGiT^S・-J^lEtaW-I1".--I"・,^ZhnaHlVQf-I".--I^ci;■沪"■•■w>a*B_!
13C_yEfl-HtO亠DWimf^\RiT\JleriALPwci4eKMfialjpa£«^j«MBitt{a«-MWemib-a
jetu^'ijKi^QCTEKrl«lpart.-npcme;frXK;FTefuc3ifile-
丄MbHE:
riEzaltziarD1C-7T:
fc£j\€r\4:
„S.&XTS2Q1DXt_n'1.■-ii:
.tie"':
爲Rff旧"
Stef:
.
创AKEIf«c«JL»ie«jQIG""4叭加巧・*»Tiliv|is”|IM■■■■■•監7i*m«19wu4k«C>\W\>T44\hnI«>.«h*hmi'9b3*
2七T
23;57;2flFMH"&'(.riWcsiiFULeB(x«4)MVIorasiDEtVisual*5tEWlilgV^lEkim口i"CTT^F'ufliIf^93gjr?
5tfl?
?
tflT-?
-Pl>4X>(£11;I
皆g行歩強辿JU
原因分析:
1)可能:
添加VS编译器环境变量,在PATH中添加VS中NMAKE路径
2)确定:
Creator或编译器无法识别&符号,即路径原文件名为R&T中含有非法字符,
无法准确识别路径
3)默认的环境变量已经有了NMAKE路径
解决方法:
把路径中非法字符删除即可
3编译出现乱码,ParseError
原因分析:
未知,应该是非法字符导致。
4无法解析的外部符号
■Nir^ird^Mobji
¥E^SJDI'TitW^tfl=l-S^T'j-iilic'v-irlwtl««ai-feMm-«11HLbMifawdiH~"fivnVEHmAvant*)■hii.d.-.丄_;・£』,
■INK2OQ1;^*ISWTWSRW'pub^virtualvcvds4hk£all出日*训fGdM:
;kqenBtG£wE(£lafi占QKayEYm1"(^a^rKsEraMV'MiainWlnd&wO*-mdlwindc^obji
Qum初“⑪眇“叩,用Ws创Rt1i%ual敦dip'SVOJBPMVbniaxEry帼rCM&0・KMME
hMAKE
O■D:
A&ra™削骼r阚沪汕灯曲It讪gl细g皿严*此阿rt丙画闭K■宾苦
原因分析:
声明的函数,未实现,或在未实现它的情况下调用了它
解决方法:
实现后再调用
5中文乱码
问题描述:
见图
#ui{newUi:
:
MainWindow)
{
ui->secuptJl(匸勺二日};
//ui->label->setlext(tr按"F!
"JJ:
//ui->label->setlex€(QStjeing;;£xcicU^f^(n®SAlS^T!
")];}
」nfiTinHriT-T'-G•A配
AC«19:
该立件包含不能住当前代码页臨)中寰示的字捋431将该文件保存均Uhicods搭式以晦止數II丢尖E:
\STUDY\test1\test1\rnair)windcwxpp
迎C2228:
扁rg”的左边必预有對结构/联合
Ar?
AA1->PO3()M);
i->pas{).y(>j
shButzton—^setText\
(Q^trina:
:
£ramUt£Sf*鼠标
6控件背景图片添加
问题描述:
按照相对路径添加背景图片不显示
解决方法:
1)相对路径起始点为构建目录,如图
构建设置
#漏t枸繭骨漲加*J|_冊陆」[至命屯…
1RS
SlH
羯生目录-E-\STUPff\匕・gtl\fat7tl-tpi1a黑面-DabnE
!
h<(E:
)■iTUCY■^estl*test】-build宜肯D乜bug
2014/7/151C^0l
20H/7/1515:
4«
201^/7/151^012014/7/1512"2D1A/7/15105?
0l4/7/1515i072014/7/151&0+
2014/7/151^0H
Makefi'e
jMakvfil^RtlfAE#
“Linaiwirdow韵vclOO
2)添加资源文件,把背景图片放到资源文件中,再通过控件属性,指定资源文
件中的背景图片即可
7昨天能启动运行成功,今天说异常结束,运行不了
原因分析:
可能是昨天在windows、system32里面添加了qtcore.dll等文件导致
解决方法:
删除之后就可以运行了,但具体删除哪个,待定
8通过控件,查找操作函数?
9修改控件名称时,弹出外部链接错误
解决方法:
修改名称后,通常有以下步骤
1)在头文件中删除对应槽;
2)修改槽动作名称或重新生成槽动作,把之前代码拷贝到新槽动作中。
10Qt数据类型转换
1)int转QStringinta=10;
QStringb;
b=QString:
:
number(a)
2)QString转int
QStringa="120"intb;
b=a.toInt()
3)int和枚举型转换
若你真的裳从inl$专换成5恥应提供强制类型转换:
I[cpp]fi喻
91.void代)
02.{
03.匚cilu厂x;
04,x»redj//changextored
05*x=Color(l);//change>towhite
96.x-匚olor
(2);//changextok>lu«
07Px=//tompile-tim亡error;tan*tconvertinttuColor
但你应保证从in酷换来的Colors型有倉义。
11相对路径找不到要操作的文件路径
答:
相对路径是QtCreator构建目录
12Qt4显示中文
13Qt5加载不了QWT控件
无法显
答:
qcreator是用VS编译的,而QWT的DLL是用mgw编译的,所以qtreator示出对应控件。
14设置窗体ICON
15qt相对路径
16控件大小无法改变
修改如下属性:
minimumsize
屈性
值
80Q
460
*si^efelicy
[Preferred,Prefer..
水平簞昭
Preferred
垂亘策昭
Preferred
0
垂直悴冕
0
JminimumSize
800m460
SOO
高度
砂
maKimuiTiSi2e
16777215at1&777_„
【、sizelncrement
0x0
0x0
第二篇中级问题
1引用了外部链接库的头文件(.h),但未添加库路径(.lib)
问题描述:
被引用的函数无法解析
原因分析:
引用的头文件只是变量及函数的定义说明,而函数实现部分都封装在对应的库中
(lib+dll)
2如何引用未添加到项目的外部头文件
描述:
Qt项目中添加的头文件一般是根据需求自己写的,而项目中需要引用大量的Qt自
带头文件及系统头文件,有时也需要用到第三方专用头文件,不可能把所有的头文件都加到
项目中。
那该如何引用这些已有的头文件呢?
这里分三类进行讨论:
1)QtSDK自带头文件
2)系统头文件
3)第三方头文件
3无法调用QDom构造函数
原因分析:
在.pro中未加入:
QT+=xml
4引用外部DLL函数,无法解析的外部符号
描述:
把dll文件和对应的.h文件拷贝到项目文件目录,添加.h文件到项目,引用dll函数
时,出现无法解析的外部符号错误
分析:
未将.lib库文件添加到项目中。
5指针参数赋值未被使用
■intA5521-6:
:
ReceiveData(charxbuffer^
QByteAizayteirp;
//serial;
//rexurnserial*read(buffer^sizeof(buiffer));teirp.endferial.readAll(H;
buffei=ten^p»data(};
<5;
J
指针是指向地址的变量,buffer=temp.data仅仅是把参数buffer指向了temp.data的
地址。
而指针参数的目的是指向调用该函数时的数组地址,这里把指针指向了其他,则丢失
了原有的数组,因为未能复制给数组。
5类A的信号,类B的槽函数,如何关联
问题描述:
nomatchingfunctionforcalltoconnect
问题解析:
我遇到过这种问题,应该是你&mDevice对应的类,没有继承QObject对象。
Qt的信号-槽机制必须以QObject为基类才能使用。
:
IL口hiiLCtioziLoro«JLLioMa.LnVlrulov"cc^iuudtltoilst口to^.ur丄ccnstLlSi
connectIthLsjSlGNS丄ige-Marte;QStr^ng)i)fimDevciefSLOT(2Srxing)i>);
LWORK\PRO」ECT\PLATFOKSAA阳氐吃割加阳国办飢ifnairwiiTowACpp
0notypenRifledOb-ert'ir'sti-urtQtPriveteiFundioiii^iriter^cDfigtchar*^'
6如何调用第三方库函数
参见QWT
7如何切换控件颜色?
8全局变量,所有cpp均可读写
Globe.h
Classglobe
{
Staticintnum;
}
Globe.cpp
Globe:
:
Globe()
{
}
IntGlobe:
:
num=0;
9.qt保留指定为小数
double/floatsize=2.3334524;
QStringstr=QString:
:
number(size,'f,2);
,提示未定义引用
其中f代表非科学计数法格式,2代表小数点后两位
10QwtPlotplot=newQwtPlot()未连接QWT库needtolinktotheQwtlibrary.
第三篇专题综述
11.指针变量按“点”后,不自动弹出箭头
QwtPlotCanvas*canvas=newQwtPlotCanvas()
把new后面的括号去掉即可
5.1各种数据类型转换
1char*与constchar*的转换char*ch1="hello11";
constchar*ch2="hello22";
ch2=ch1;〃不报错,但有警告
ch1=(char*)ch2;
2char转换为QString
其实方法有很多中,我用的是:
chara='b';
QStringstr;
str=QString(a);
3QString转换为char
方法也用很多中
QStringstr="abc";
char*ch;
ch=str.toLatin1.data();
4QByteArray转换为char*
char*ch;〃不要定义成ch[n];
QByteArraybyte;
ch=byte.data();
5char*转换为QByteArray
char*ch;
QByteArraybyte;
byte=QByteArray(ch);
6QString转换为QByteArray
QByteArraybyte;
QStringstring;
byte=string.toAscii();
7QByteArray转换为QString
QByteArraybyte;
QStringstring;
string=QString(byte);
这里再对这俩中类型的输出总结一下:
qDebug()<<"print";
qDebug()<
qDebug()<qDebug()<
qDebug()<qDebug()<
qDebug()<但是qDebug()<
qDebug()<
|
8int转QString
inta=10;
QStringb;
b=QString:
:
number(a)
9QString转int
QStringa="120"
intb;
b=a.toInt()
10char*与constchar*的转换
char*ch1="helloll";
constchar*ch2="hello22";
ch2=ch1;〃不报错,但有警告
chi=(char*)ch2;
11char转换为QString
其实方法有很多中,我用的是:
chara='b';
QStringstr;
str=QString(a);
12QString转换为char
方法也用很多中
QStringstr="abc";
char*ch;
ch=str.toLatin1.data();
13QByteArray转换为char*
char*ch;〃不要定义成ch[n];
QByteArraybyte;
ch=byte.data();
14char*转换为QByteArray
char*ch;
QByteArraybyte;
byte=QByteArray(ch);
15QString转换为QByteArray
QByteArraybyte;
QStringstring;
byte=string.toAscii();
16QByteArray转换为QString
QByteArraybyte;
QStringstring;
string=QString(byte);
这里再对这俩中类型的输出总结一下:
qDebug()<<"print";
qDebug()<
|
qDebug()<qDebug()<
qDebug()<qDebug()<
qDebug()<但是qDebug()<
qDebug()<
|
17int转QString
inta=10;
QStringb;
b=QString:
:
number(a)
18QString转int
QStringa="120"
intb;
b=a.toInt()
1QString-->string
QString.toStdString();
2string-->QString
QString:
:
fromStdString(string)
3QString--->int,double,char*
QString:
:
tolnt()
QString:
:
toDouble()
QString.toStdString().c_str();
4intdoublechar*--->string
可以采用里的stringstream
以int为例,inta=3;
stringstreamss;
stringstrInt;
ss<ss>>strInt;
其他两个一样。
5intdoublechar*转QString
一种方法可以先转string,再转QString。
另一种方法可以查看QString类的函数。
其一:
静态函数QStringnumber(doublen,charformat='g',intprecision=6)
其二:
非静态函数,需构造QString实例来调用的QString&setNum(doublen,char
format='g',intprecision=6)
QString:
:
number()这个静态函数,参数可以是int,也可以是double。
6doubleint的互转
可采用static_cast
5.2结构体类型转换
1)结构体转字符数组
structA
{
inta;
intb;
};
charbuf[100];
Aa={1,2};
memcpy(buf,&a,sizeof(A));
2)字符数组转结构体
5.3调色板使用
QPalette类有两个枚举类型,
枚举
1、ColorGroup
CorGroup指的是3中不同的状态(什么时候设置颜色):
1>Active:
获得焦点的状态。
2>lnactive:
未获得焦点的状态。
3>Disable:
不可用状态。
通常情况下,Active状态与Inactive状态下颜色显示是一致的,当然也可根据需要设置成不一样的颜色
2、ColorRole(设置什么颜色)。
ColorRole指的是颜色主题,即对窗体中不同部位颜色的分类,如QPalette:
:
Window是指背景色,QPalette:
:
WindowText指的是前景色等。
常用:
QPalete:
:
Window,通常指窗口部件的背景色;
QPalette:
WindowText,通常指窗口不见的前景色(QLabel也可以使用);
QPalette:
:
Base,指文本输入窗口部件(比如QTextEdit,QLinedit,QPIainTextEdit等)的
背景色
QPalette:
:
Text,与QPalette:
:
Base一块使用,指文本输入窗口部件的前景色;
QPalette:
:
Button,指按钮窗口部件的背景色;
QPalette:
:
ButtonText,指按钮窗口部件的前景色
QPalette:
:
Highlight:
用于设置文字高亮时的背景颜色
QPalette:
:
HighlightedText:
用于设置文字高亮时的颜色
QPalette:
:
Link:
超链接文字颜色
QPalette:
:
LinkVisted:
超链接文字访问后的颜色
(目前使用的很少,但是可以直接拿来用)因为,带有默认色
QPalette:
:
Light:
比Button的亮
QPalette:
:
Midlight:
亮度在Light与Button之间
QPalette:
:
Dark:
QPalette:
:
Mid
QPalette:
:
Shadow
例如:
//设置可以自动填充背景色ui->label->setAutoFillBackground(true);//设置背景
色为Palette:
:
Shadowui->label->setBackgroundRole(QPalette:
:
Shadow);ui->label2->setAutoFillBackground(true);
ui->label2->setBackgroundRole(QPalette:
:
Light)
5.3变长数组QVector
展开阅读全文
相关搜索
资源标签
|
|
|
|
|
|
|