QT 学习笔记一.docx
《QT 学习笔记一.docx》由会员分享,可在线阅读,更多相关《QT 学习笔记一.docx(11页珍藏版)》请在冰豆网上搜索。
QT学习笔记一
QT学习笔记一2011.2.14
1.类之间的调用
有A和B两个类。
它们分别有一个.h和.cpp文件。
若B的cpp文件中要用到A类中的对象,则需要在B.h文件中添加
#include“A.h”
……
private:
Ui:
:
MainWindow*ui;
Dialog2mydialog;
Aa;
像这样定义A类对象。
这样即可在B.cpp文件中直接使用a了。
2.信号的传递与接受
此处有两种方法
(1)选中控件,点击鼠标右键,选择“gotoslot”。
QT中slot是信号槽的意思。
这也是QT中独有的概念。
在弹出的对话框中选择需要此控件做的动作。
点击确定,即可在相应函数中添加内容。
(2)在设计框下选中“Signals&SlotEditor”选项卡中,添加信号。
Sender选择控件名称
Signal选择需要控件做的动作相应地函数
recieve包含动作控件的控件名称
Slot选择信号
在main.cpp中用
QApplicationtest(argc,argv);
MainWindoww;
Dialog2d;
if(d.exec()==QDialog:
:
Accepted)
{
w.show();
returntest.exec();
}
else
{
return0;
}
这样的方法判断并进行相应操作。
可参考:
Examples-Test
3.控件的一些常用操作(用户登录功能)
(1)将密码设为*
ui->pwdlineEdit->setEchoMode(QLineEdit:
:
Password);
(2)将textbox内容清空
ui->usrlineEdit->clear();
(3)光标放在某一个textbox上
ui->usrlineEdit->setFocus();
常用用户登录功能参考:
Examples-Test
4.如何通过QTCreator创建菜单,添加图标和背景图片
首先创建一个project.New->QT4GuiApplication.创建完毕后,点击XXX.ui,开始添加菜单:
双击左上角的”TypeHere”进行编辑,编辑完后回车(回车很重要),回车后就会出现下拉菜单,继续类似编辑。
Ok,菜单编辑完成了,界面的ActionEditor就会有你添加的内容,如下.
第二步,给菜单添加图标。
这里我们就需要创建资源文件了。
选择New->QTSourceFile(注意必须要有Pro文件与之匹配)。
创建完成后可以看到Porject里面多了一个资源文件:
XXX.qrc.选择资源文件,点击Add->AddPrefix1,后继续AddFiles.将你需要的ICO文件,图片都添加到资源文件中,添加完成后保存。
继续选择XXX.ui,双击ActionEditor的某项,点击”Icon”的”ChooseResource”选择你想要的图标,点击OK完成.效果如下(我都用的同一图标):
添加一张图片
第三步,给窗体加背景.单击右键->ChangestyleSheet,在弹出的”EditStyleSheet”中点击”AddSource”->backgroundimage”,选择想要添加的图片,点击OK,完成.同样其他的控件也可以通过同样的方式添加
2.23
5.如何将QTCreator的程序移植到ARM板上?
(1)确定Fedora系统上已安装QTEmbedded-4.7-arm。
安装后所在目录为/usr/local/Thllocher/;若尚未安装,则从友善之臂的光盘中将arm-qte-4.7.0-20101105.tar.gz拷贝到PC机上解压。
因之前所有linux相关都放在了/opt/FriendlyARM/mini6410目录下,故此也放在了此目录下。
解压缩。
运行./buildall命令,编译QTE-4.7
(一定要用arm-linux-g++编译器进行编译,参考Tiny6410开发指南)
(2)在QTCreator中建立交叉编译环境
参考Mini6410QT4和Qtopia编程开发指南;
P49:
4.2使用QtCreator工具开发第一个Qt4程序到mini6410上
(3)写驱动脚本
脚本名称命名为setqt4env,可以在vi编辑器中完成,也可在PC机上新建空文档编辑完成。
然后将其用U盘拷至ARM板的相应位置
脚本内容如下:
#!
/bin/sh
if[-e/etc/friendlyarm-ts-input.conf];then
./etc/friendlyarm-ts-input.conf
fi
true${TSLIB_TSDEVICE:
=/dev/touchscreen}
TSLIB_CONFFILE=/etc/ts.conf
exportTSLIB_TSDEVICE
exportTSLIB_CONFFILE
exportTSLIB_PLUGINDIR=/usr/lib/ts
exportTSLIB_CALIBFILE=/etc/pointercal
exportQWS_DISPLAY=:
1
exportLD_LIBRARY_PATH=/usr/local/lib:
$LD_LIBRARY_PATH
exportPATH=/bin:
/sbin:
/usr/bin/:
/usr/sbin:
/usr/local/bin
if[-c/dev/touchscreen];then
exportQWS_MOUSE_PROTO="TslibMouseMan:
/dev/input/mice"
if[!
-s/etc/pointercal];then
rm/etc/pointercal
/usr/bin/ts_calibrate
fi
else
exportQWS_MOUSE_PROTO="MouseMan:
/dev/input/mice"
fi
exportQWS_KEYBOARD=TTY:
/dev/tty1
exportHOME=/root
每次运行程序时,需要输入以下命令。
.setqt4env(.与s之间有空格)
./projectname
(4)对方的
6.给窗口设置滚动条
1.设置mainwindow为网格布局。
2.添加QScrollArea部件,此部件的widgetResizable值默认为true,若此部件本身没有设置布局,则将其设置为false;反之,则采取默认值。
3.将需要的部件添加至QscrollArea部件中即可。
如下为添加了滚动条后的窗口。
PICTURE:
/root/.tencent/qq//AppData/file//sendpix0.jpg
/root/.tencent/qq/AppData/file/sendpix0.jpg
7.vi编辑器的常用命令
vi编辑器有三种模式:
命令模式,编辑模式,末行模式
打开vi后首先是命令模式,用i,o,a等进入编辑模式,按esc退出编辑模式,回到命令模式。
在命令模式下输入:
wq表示保存退出,:
wq!
强制保存退出,:
w表示保存,:
wfile表示保存在另一个文件中:
q表示退出
在命令模式下可以用用ZZ,ZQ这些指令直接保存退出。
创建文件夹命令:
mkdirfilename1
删除文件夹:
umdirfilename
复制文件夹命令:
cp-rffilename1/path
8.开机自动运行QT4程序
修改/etc/init.d/rcS文件:
@#vi/etc/init.d/rcS
将/bin/qtopia&
修改为
.setqt4env
Uproject-qws&
重新启动开发板即可。
问题:
开机自动运行后,触摸板失效。
已解决。
解决方法:
(1)主要工作是编译在ARM板上运行的qt库。
下载:
qt-embedded-linux-opensource-src-4.5.3.tar.gz,tslib-1.4.tar.gz
(2)1>首先编译安装触摸屏驱动库tslib-1.4
./autogen.sh
./configure—prefix=/usr/local/qte-arm/tslib-1.4—host=arm-linuxac_cv_func_malloc_0_nonnull=yes
make
sudomakeinstall
这样就可以在/usr/local/qte-arm/tslib-1.4目录下看到相关的应用程序、共享库、配置文件等,这些库和配置文件都是要拷到ARM板的根文件系统中的。
2>编译qt-embedded-linux-opensource-src-4.5.3
./configure-prefix/usr/local/qte-arm\
-no-qt3support\
-qt-zlib\
-qt-libtiff\
-qt-libpng\
-qt-libmng\
-qt-libjpeg\
-makelibs\
-nomakeexamples\(不编译例子程序和文档)
-nomakedemos\
-nomakedocs\
-no-nis\
-no-cups\
-no-iconv\
-xplatformqws/linux-arm-g++\
-embeddedarm\
-little-endian\
-qt-freetype\
-depths8,16,24,32\
-qt-gfx-linuxfb\
-no-gfx-transformed\
-no-gfx-qvfb\
-no-gfx-vnc\
-no-gfx-multiscreen\
-qt-kbd-usb\
-qt-kbd-tty\
-qt-mouse-pc\
-no-glib\
-qt-mouse-tslib-I/usr/local/qte-arm/tslib/build/include-L/usr/local/qte-arm/tslib/build/lib
编译选项-qt-mouse-tslib需要用到触摸屏功能的动态库,所以得把之前编译安装的tslib库包含进来。
make
makeinstall
这样qt/E的编译工作完成,主要是得到了qt程序在arm板上运行所需要的库文件,以及用于arm平台的qmake,moc,uic等工具。
3>拷贝相关文件到ARM根文件系统
拷贝/usr/local/qte-arm/tslib整个目录到arm板根文件系统root_nfs/下;
拷贝/usr/local/qte-arm/lib/下所有库文件到root_nfs/opt/qt/lib目录下,你可能不需要全部的库文件,可根据需要选择
4>设置环境变量和配置文件
首先设置tslib的配置文件 geditroot_nfs/tslib/build/etc/ts.conf
module_rawinput
modulepthrespmin=1
modulevariancedelta=30
moduledejitterdelta=100
modulelinear
然后设置qt及tslib的环境变量:
geditroot_nfs/etc/profile
在最后加入:
exportQTDIR=/opt/qt
exportT_ROOT=/tslib/build
exportPATH=$T_ROOT/bin:
$PATH
exportLD_LIBRARY_PATH=$T_ROOT/lib:
$QTDIR/lib
exportTSLIB_CONSOLEDEVICE=none
exportTSLIB_FBDEVICE=/dev/fb0
exportTSLIB_TSDEVICE=/dev/input/event0
exportTSLIB_PLUGINDIR=$T_ROOT/lib/ts
exportTSLIB_CONFFILE=$T_ROOT/etc/ts.conf
exportTSLIB_CALIBFILE=/etc/pointercal
exportQWS_KEYBOARD=USB:
/dev/input/event1
exportQWS_MOUSE_PROTO=Tslib:
/dev/input/event0
exportQWS_DISPLAY=LinuxFb:
mmWidth45:
mmHeight60:
0
exportQWS_SIZE=272x480
重启开发板,移植完成!
注意,在开发板上运行qt程序要加-qws选项,从而让程序以Server模式运行。
(3)
9.点击按钮切换页面
选中按钮,右击鼠标,选择“gotosolt”,再选择需要按钮做出的响应函数,此处已clicked为例。
点击确定之后,会在.cpp文件中生成自动生成函数,将需要的操作内容在此函数中编写。
参考代码如下:
voidMainWindow:
:
on_inteligencedrive_clicked()
{
QObject:
:
connect(ui->inteligencedrive,SIGNAL(clicked()),
this,SLOT(changetointeldrivepage()));
}//当inteligencedrive这个按钮clicked的时候,会发出clicked的信号,然后调用槽函数changetointeldrivepage(),在槽函数中可以编写哪个部件来响应这个clicked事件及的响应部件的相应动作
槽,其实就是C++中函数的意思,自己在.h文件中声明(定义)这个槽,然后在.cpp文件中区实现这个槽,来达到将信号与响应部件间的连接。
槽只是一个被调用的过程。
如,在.h中这样声明一个槽:
voidchangetointeldrivepage();
在.cpp中的实现代码如下:
voidMainWindow:
:
changetointeldrivepage()
{
//stackedWidget的页数设置时是从0开始算起的。
ui->stackedWidget->setCurrentIndex(3);
}
在这个槽函数中响应的部件是stackedWdget,做出的动作是切换到第4个页面。
至于函数中写的是3,这里为何说是第4个呢?
请看代码中的注释。
至此,通过点击按钮来达到切换页面的效果就达到了。
注意:
1.槽的自定义和实现及调用。
2.stackedWidget的页数设置时是从0开始算起的。
页面成果图:
2011-3-22
1.关于arm下字体大小不一的问题
解决方法:
(1)要下载arm下可用的中文显示字体,一般用wenquanyi的就可以,也比较多。
用Wenquanyi_160_50.qpf文件居多。
50表示正常体,若是75则表示是黑体。
(2)将其放在arm下字体库中。
具体哪个目录要试过才知道。
放在:
/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib/fonts
目录下。
具体的arm板目录可能有所不同。
(3)在工程中的main.cpp文件中做字体设置。
且要在定义mainwindow之前设置好,否则三级菜单(内容)中的字体依然会有字体大小不一的问题。
Qfontfont(“wenquanyi”,6);
a.setFont(font);
2.