请问 linux Qt 中能用 gluPerspective 方法实现3D 的透视效果么?如果能qt tr 头文件件是什么?

QT5中如何使用QFtp类
(转载)QT5中如何使用QFtp类
由于QT5对QML的支持有很大的改进,所以打算将原来基于QT4的程序移植到QT5上,在移植用QFtp类写的程序时傻眼了!
Qt5&移除了&QFtp
API,原因是其实现质量。QNetworkAccessManager&可以用来提供&ftp
url&的上传下载操作。
由于原来的程序已经跑的很稳定了不想做修改,然后就去想其它办法,结果发现官方说这些&API&将由某一易于迁移的独立形式提供。
鄙人就去git看了看,结果发现这个源码一直在更新,已经更新到支持Qt5了,所以我就下载了一份源码,然后编译了一个支持QT5的QFtp。
废话不多说了,直接说我怎么做的:
1.去git下载代码
我下载的时候最后更新时间是
然后点击红色区域的那个连接
在新窗口中点击
如图用QTCreator打开项目
然后编译编译最后会有几个类似警告的东西,直接点击忽略
3.完成后会在构建目录\lib\目录下面生成两个编译好的静态库
4.编译动态库
进入\master\qt-qtftp\src\qftp目录
修改qftp.pro文件
将原来的两句CONFIG修改为:
&CONFIG -= static
&CONFIG += shared
然后编译编译完成后同样会在构建目录\lib\目录下生给予成我们需要的动态库文件
5.部署编译好的库
5.1将动态库(.dll文件)拷贝至C:\Qt\Qt5.1.0\5.1.0\mingw48_32\bin目录下
5.2将静态库(.a文件)拷贝至C:\Qt\Qt5.1.0\5.1.0\mingw48_32\lib目录下
5.3将master\qt-qtftp\src\qftp目录下的两个头文件qftp.h和qurlinfo.h
拷贝至C:\Qt\Qt5.1.0\5.1.0\mingw48_32\include\QtNetwork目录下
5.4在该目录下创建一个文件QFtp注意没有扩展名
5.5用记事本打开QFtp文件,并且在其中写上#include”qftp.h”
6.使用编译好的库
需要连接哪个库就在pro文件中连接哪个库
& &LIBS+="C:/Qt/Qt5.1.0/5.1.0/mingw48_32/bin/Qt5Ftp.dll"
7.然后你原来基于QFtp写的程序就可以成功编译了
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Qt中使用QLabel显示时间的两种方法_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Qt中使用QLabel显示时间的两种方法
来源:Linux社区&
作者:Linux
Qt中使用QLabel显示时间的两种方法思路一致,只是实现方法不一样而已。
#include "displaytime.h"#include &QApplication&
int main(int argc, char *argv[]){& & QApplication a(argc, argv);& & DisplayT& & w.show();& & & & return a.exec();}
displaytime.h
#ifndef DISPLAYTIME_H#define DISPLAYTIME_H
#include &QWidget&#include &QtGui&
class DisplayTime : public QWidget{& & Q_OBJECT& & public:& & DisplayTime(QWidget *parent = 0);& & ~DisplayTime();
private:& & QLabel *timeL
protected:& & void timerEvent(QTimerEvent * event);};
#endif // DISPLAYTIME_H
displaytime.cpp
#include "displaytime.h"
DisplayTime::DisplayTime(QWidget *parent)& & : QWidget(parent){& & timeLabel = new QLabel(this);& & timerEvent(0);& & startTimer(1000);& & timeLabel-&show();}
DisplayTime::~DisplayTime(){& & }
void DisplayTime::timerEvent(QTimerEvent *event){& & Q_UNUSED(event);& & timeLabel-&setText(QTime::currentTime().toString("hh:mm:ss"));}
displaytime.h
#ifndef DISPLAYTIME_H#define DISPLAYTIME_H
#include &QWidget&#include &QtGui&
class DisplayTime : public QWidget{& & Q_OBJECT& & public:& & DisplayTime(QWidget *parent = 0);& & ~DisplayTime();
private:& & QLabel *timeL
private slots:& & void updateTime();};
#endif // DISPLAYTIME_H
displaytime.cpp
#include "displaytime.h"
DisplayTime::DisplayTime(QWidget *parent)& & : QWidget(parent){& & timeLabel = new QLabel(this);& & timeLabel-&setGeometry(0, 0, 150, 30);
& & QTimer *timer = new QTimer(this);& & connect(timer, SIGNAL(timeout()),& & & & & & this, SLOT(updateTime()));& & timer-&start(1000);
& & timeLabel-&show();}
DisplayTime::~DisplayTime(){& & }
void DisplayTime::updateTime(){& & timeLabel-&setText(QDateTime::currentDateTime().toString("hh:mm:ss"));}
Qt 的详细介绍:Qt 的下载地址:
推荐阅读:
环境下Gtk与QT编译环境安装与配置
Linux系统下QT环境搭建
Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
Ubuntu 10.04下QT4.7.4移植详解
Linux下为刚安装好的Qt Creator 创建桌面启动图标
Ubuntu 11.04安装QT Creator 2.5.0
Qt creator for PlayBook安装过程
相关资讯 & & &
& (01/14/:20)
& (09/26/:09)
& (04/07/:36)
& (01/08/:52)
& (09/16/:11)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款博客访问: 817250
博文数量: 178
博客积分: 3640
博客等级: 中校
技术积分: 1758
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
网上关于图片的淡出淡入效果的讨论蛮多的,但是用QT实现就很少了。实现这种效果有两种途径:一是读取图片的RGB值,然后渐进达到淡出淡入的效果,这种方法我没有尝试,感觉还是比较复杂。二是设置加载图片载体的透明度,从完全透明到完全显示,控制这个过程可以用过定时器(QTimer)来实现。&&&&&&我是用QLabel加载图片的,主要运用到QTimer和QGraphicOpacityEffect这两个控制类。下面我说一下实现这种效果的步骤:&& 把label的属性背景透明度设置为透明,注意这并不能使你的图片变为透明,因为这只是使得label的边框,背景色彩消失而已。&ui->label->setAttribute(Qt::WA_TranslucentBackground, true);&& 加载图片,这个就不多说了,我是加载了一张gif图片,是静态的gif图片- -。&ui->label->setPixmap(QPixmap("path"));&& 把加载了图片的label设置完全透明&float opacity=0.0;QGraphicOpacityEffect *effect=new QGraphicOpacityEffect()'effect->setIOpacity(opacity);//透明范围为0.0-1.0,默认为0.7&&ui->label->setGraphicEffect(effect);&& 利用QTimer实现渐变过程&QTQObject::connect(&timer,SIGNAL(timeout()),this,SLOT(fade_on_fade_out()));timer.start(250);//每隔250毫秒发射一次timeout()在槽函数fade_on_fade_out()实现渐变功能&void fade_on_fade_in(){&&&&&&&&if(opacity>=1.0)}&&&&{&&&&&&&&timer.stop();//定时器停止&&&&}&&&&else&&&&{&&&&&&&&effect->setOpacity(opacity);&&&&&&&&ui->label->setGraphicsEffect(effect);&&&&&& }&&&&opacity+=0.1;//透明度累加}完成。
阅读(3341) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。1225人阅读
日 增加国际化内容
日QtCreator 添加工具条
Qt程序为C++程序的基础上开发的。
以main开始。
Qt程序有一个唯一的代表本程序的类QApplication。生成其对象后,运行exec()函数,则程序运行。
QtApplication具有一个唯一的活动窗体QWidget,使用setActiveWindow()设置。QtApplicate将会以活动窗体的生命周期为主生命周期。
qApp代表本程序的QtApplicate的实例。
1.1 类关系
对象类:QObject是QWidget的基类 ,QWidget是所有UI的基类。
主窗口类:QMainWindow,具有菜单和工具条等基本窗口部件。
对话框类:QDialog,对话框类。
控件类:QWidget,所有控件基本。
2&信号与槽 Signal and Slot
信号与槽技术是Troll Tech公司独立创建的技术。使用MOC(meta object compiler)创建合乎C++标准的回调函数。
信号:事件,包含用户事件,内部状态事件。使用成员函数实现。
发射信号:emit。
槽:处理事件。标准函数+添加slot标志。
连接:将signal与slot进行connect,这样在emit signal时就调用slot。
2.1 使用方法&
使用信号和槽时,必须首先声明Q_OBJECT宏。
声明槽:public slots:。
声明信号:singals:(这里没有范围标志)。
发射信号:emit 信号函数。
连接信号和槽:connect(sender,signal,receiver,slot);
断开信号与槽的连接:disconnect(sender,signal,receiver,slot);
信号和槽之间的参数可以不匹配。
可以将信号与信号进行连接。
如果连接到当前的槽,则可能省略receiver,但并不推荐这么做,会引起混淆。
3&MOC元对像编译
将qt的信号和槽转化为标准的C++代码。
MOC在Qt的bin目录下moc.exe。
moc& .h文件–o .moc文件
这里.moc文件就是标准的c++头文件。
在使用时,需要将所有使用信号和槽的头文件转化为.moc文件,然后将moc文件包含在头文件中(不要包含在cpp文件中)。
4.1 主窗体QMainWindow
QMainWindow是一个遵循Windows窗体的Widget,可以包含菜单,工具条,状态栏等标准窗体控件。
可以使用QMdiArea,QMdiSubWindow来设置MDI。
4.2 滚动条
QScrollArea:指定区域滚动。将窗体作为QScrollArea的子控件使用(setWidget())。注意,此时子控件的内存将由QScrollArea进行释放。
QScrollBar:滚动条。
样式布局,可以设置滚动条。
QAction:item.SLOT can be connet here.
QMenu:menu.
QMenuBar:bar.
QMainWindow中使用menuBar()-&addMenu()添加到当前主窗口。
4.4 工具条
QToolBar:添加QAction进行事件响应。
QMainWindow中使用addToolBar()将添加工具条添加到当前主窗口。
在QtCreator中,UI具有maintoolbar,只要向这个工具中添加action,就可以直接显示相关工具了(可以直接将action拖动到工具条上完成添加)。
如果要向窗体中添加新的工具条,要吧在QtCreator的对象浏览器中右击主窗体对象MainWindows-》添加工具条,就会生成一个新工具条。
4.5 状态条
statusBar():如果存在,则返回指针,如果不存在,则创建后返回指针。
5.1 QFrame
所有带有边框的部件的基类。
用于调整边框效果。
5.2 QCompleter
具有自动补全功能。
可以被具有编译功能的控件使用。
5.3 QDateTimeEdit
微调日期时间。
可以设置样式。
5.4 QPushButton
setIcon():设置图片。
5.5 QRadioButton、QButtonGroup、QCheckBox
单选按钮,复选按钮。
放在QButtonGroup中组成一组。
5.6 QTableView,QTableWidget
QTableView是QTableWidget的基类。
增加行、列数目:setRowCount(),setColumnCount()。
删除行、列:removeRow()、reomveColumn()。
设置水平表头:setHorizontalHeadLabels()。
设置垂直表头:setVertialHeadLabels()。
设置编辑方式:setEditTriggers()。
设置选中方式:setSelectionBehavior()。
获取选中内容:处理相关的信号。
参考:http://blog.csdn.net/xgbing/article/details/7774737
5.7 QListWidget
添加项:addItem()
删除项:takeItem();removeItemWidget();记得要delete item。
修改项:首先将item设置为可编辑(pItem-&setFlags(Qt::ItemIsEnabled|Qt::ItemIsEditable)),然后将使用editItem(pItem)。
获取选中项:处理相关信号。
5.8 QComboBox
添加项:addItem()
删除项:removeItem()。
修改项:setItemText()。
获取选中项:处理相关信号。或直接使用currentText()。
5.9 QGroupBox
添加项:在布局中添加项。
布局:setLayout()可以用于添加布局。
5.10 QButtonGroup
用于设置单选按钮为一组。
5.11 QSplitter
用于将子控件大小变为可以拖动,并统一布局。
添加子部件:以splitter为父控件,或者addWidget。
设置切分方法:setOrientation();
5.12 QTabWidget
用于不同页面的切换。
添加页面:addTab()。
删除页面:removeTab()。
切换页面:setCurrentTab()。
获取当前页面:CurrentIndex(),currentWidget()。
5.13 QSlider
滑块控件。
设置范围:setRange()。
设置刻度间隔:setTickInterval()。
设置步进值:setPageStep(),setSingleStep()。
获取当前值:value();处理valueChanged信号。
5.14 QSpinBox
微调控件。
设置范围:setRange()。
设置步进值:setSingleStep()。
获取当前值:value();处理valueChanged信号。
5.15 QTreeWidget
树状列表框。
首先要设置col宽度。
添加Root:addTopLevelItem()。
添加subItem:以RootItem为父Item构造。
当前选中项:currentItem()。
设置进度:setValue()。
获取当前进度:value()。
5.17 QDoubleValidator、QIntValidator
验证器,用于输入验证。
通过时触发editingFinished、returnPressed,不通过时无效。
可以通过派生于QValidator的类,实现validate()函数来实现验证输入信息。可以返回明确的同意或拒绝,当未完成输入时,返回不确定。
6&抽象的行为:QAction
在GUI的交互中,menu,toolbar等同一个响应事件,可能会有许多的入口。为了使多个控件可以使用相同的响应事件,Qt中使用QAction抽象为行为的类。
QAction的主要用途是对于菜单项、工具按钮、快捷方式等多个入口提供统一的行为。在QMenu中提供了简单的构造QAction的方法。
6.1 使用方法
QAction一般在UI设计时,作为主窗口ui类的私有成员,在控件调用之前创建,并用控件的addAction()方法添加引用(这一步可以在UI的设计中自动完成)。
然后在逻辑主类中与相关的SLOT函数connect进行使用。
class Ui_MainWindow
&&& QAction*actionO
&&& QAction*actionExecQ
&&&&&&&&&&&&& ………………………………….
&& actionOpen = newQAction(MainWindow);
&&actionOpen-&setObjectName(QString::fromUtf8(&actionOpen&));
&& actionExecQuery =new QAction(MainWindow);
&&actionExecQuery-&setObjectName(QString::fromUtf8(&actionExecQuery&));
&&&&&&&& ………………………………….
&menu-&addAction(actionOpen);
&menu_2-&addAction(actionExecQuery);
&&&&&&&& ………………………………….
&&& //execqueryaction
&&& connect(ui-&actionExecQuery,SIGNAL(toggled()),this,SLOT(execQuery()));
7&正则表达式
绘图工作需要在一个QPaintDevice上使用QPainter进行绘制,绘制功能由QPaintEngine提供(由QPainter调用,由各种图形库提供,用户一般不用处理)。
具体的绘制工作由QPainter完成,结果和数据源由QPaintDevice提供。
可以应用QPainter进行绘图。
8.1.1绘图规则
重载paintEvent()。
begin();设置当前为active。
具体的绘制工作。只能放在此区域时才能被处理。
end();清除当前的active状态。
8.1.2绘制图形
可以绘制各种图形。
8.1.3样式控制
可以设置多种样式。
8.1.4颜色控制
支持各自格式的颜色。
8.1.5坐标控制
缩放、裁剪等功能。
shear():表示裁剪坐标系,使坐标系统的大小变为原来的倍数。0,表示不变。其它数值表示扩展为原来的多少倍。然后,图像坐标在新坐标系统中重新显示。
rotate():旋转。以度为单位。顺时针。
translate():平移。
scale():缩放。
setViewPort():设置设备坐标范围。默认为设备范围。可以用此函数人为设置设备的范围(只是改变当前的范围,设备并不能改变,但是输出认为已经改变)。
setWindow():设置逻辑坐标范围。默认为设备范围。可以用此函数人为设置逻辑坐标范围。可以据此与设备坐标的关系,重新绘制输出。
使用QMovie可以控制gif。
首先使用QMovie打开gif,然后指定到相关QLabel(setMovie)。调用start()开始播放。
8.2.2格式
可以作为设备的类:能够直接处理图像数据。包含QImage(图像处理)、QPixmap(显示)、QBitmap(单色QPixmap)、QPiture(QPainter处理过程)。全部继承于QPaintDevice,能够被QPainter直接在内存中操作。
读写文件:QImageReader、QImageWriter用于处理数据的加载和保存的统一接口,并提供多种操作功能。
读写数据:QImage专门用于数据读写
格式转换:可以进行相互转换。
8.2.3QPicture
8.2.3.1& 图像的读取
图像的存取,使用QPicture。
作为一个内存设备。可以用作QPainter的内存设备。用于对QPainter的内存操作,可以读写为pic文件。
QPicture.load():读取图像。
使用时,先load pic文件,再使用QPainter绘制Pic文件。
8.2.3.2& 图像的存储
QPicture.save():保存图像。
使用时,首先在生成一个图像,然后使用QPainter绘图,完成后再save。
打印机:QPrinter。
打印机设置:QPrintDialog。
打印内容:QPainter在QPrinter上绘图。
需要在qmake中添加printsupport。
10&&& 对话框
10.1 打开、保存文件对话框
QFileDialog。
获取打开文件名称:getOpenFileName()。
获取保存文件名称:getSaveFileName()。
10.2 颜色选择对话框
QColorDialog。
获取选中颜色:getColor()打开对话框,选中后返回。然后使用QColor获取。
10.3 打印设置对话框
10.4 进度条对话框
QProgressDialog。
设置进度值、进度范围:同进度条(QProgressBar)。
10.5 消息对话框
QMessageBox。
显示消息:构造消息,然后show()。
10.6 字体选择对话框
QFontDialog。
获取选中字体:getFont()。
10.7 自定义对话框
QDialog:是所有对话框类的基类,用于生成自定义对话框。
模式、非模式对话框:可以设置开关标志设定。
使用共同的基类QDialog。
返回值:统一使用done(int)。更为方便的是使用accept(),reject(),
10.8 选项卡对话框
QTabDialog。
添加选项卡。
获取选择状态。
10.9 错误消息对话框
QErrorMessage。
带有消息提示和继续提示checkbox样式的对话框。
显示消息:showMessage()。
显示调试信息:qHandler():将qDebug(),qWarning() and qFatal()输出到QErrorMessage。
10.10 向导对话框
用于自由切换,状态选择的向导。
需要傅QWizardPage作为向导的每个步骤。
11&&& 布局
目标是自动管理所有的控件,用于大量控件的自动布局。
布局必须在Widget上。
QLayout:所有布局类的基类。
QBoxLayout:QHBoxLayout和QVBoxLayout的基类。如果无法确定按行、列排列,使用此类。
QHBoxLayout、QVBoxLayout:按行,列排列。
QGridLayout:按网络排列。setColumnStretch()设置列数,行数据此推算。
QFormLayout:表格可式排列,Label后+edit。
11.1 大小设置
布局使用一个政策来确定sizeHint()大小如何变化。
sizeHint():设置大小。此大小为用户设置大小,程序将以此大小为主进行设置。
minimumSizeHint():最小大小建议。建议值。
minimunSize():最小大小。设置后minimumSizeHint()无效。
QSizePolicy::Fixed():固定大小。
QSizePolicy::Minimum():最小。
QSizePolicy::Maximum():最大。
QSizePolicy::Preferred():最优。
QSizePolicy::Ignored():忽略。
QSizePolicy::Expanding():可以伸缩,倾向扩展。
QSizePolicy::MinimumExpanding():最小,可以伸缩,倾向扩展。
12&&& 文件
12.1 文件读写:QFile
读取:QFile打开文件,QTextStream获取文件流,QTextStream调用read函数读取数据。使用完成后关闭。
写入:打开时用write权限,然后向流中写入信息。
12.2 目录读写:QDir
使用QDir读取当前目录下的所有内容,使用【】可以读取其中一条子目录。
12.3 文件信息读写:QFileInfo
指定目录后可以操作相应的信息。
12.4 配置文件:QSettings
12.4.1原理
配置文件用于记录用户对软件的设定。在Windows中使用系统注册表(麻烦),在MacOS中使用喜好XML。在Unix中无标准,一般使用ini文件。
所以默认情况下,如果我们创建一个QSettings,则在Windows中生成一个注册表项,在其它操作系统中也有相应的文件生成。如果指定为INIForma,可以在创建时指定存储位置,默认情况下位置存放在用户文档下。
QSettings是线程安全的,但数据更改后并不会立即写入,使用Sync()可以获取、写入最新的数据。
配置文件有多种类型,NativeFormat表示使用系统API定义,也INIFormat表示使用ini文件,也可以自定义类型。
12.4.2数据组织
默认情况下,使用用户组织=》程序名作为QSettings的名称。在INIFormat中可以指定名称。
配置文件分为用户范围和系统范围两种作用域。
配置文件中以【Section】为分割段。
配置文件中的数据以键值对的方式组织数据,键是QString类型,值为QVariant类型。
可以将任何类型直接转换为QVariant,但是从QVariant只能直接转换为QtCore范围内的格式,对于其它格式,使用QVariant::value&class&进行转换。
不同的OS中对于大小写敏感性不同,所以应该尽量使用相同的大小写格式读写数据,但不以大小写为识别特性。
在查询配置项时,可以按照用户项、组织项、系统用户项、系统组织项的顺序查找,也可以禁用这种回溯查询。
12.4.3创建配置文件
如果在QApplication中指定ApplicationName、OrganizationName,则可以直接使用QSettings默认构造函数创建。
如果创建指定名称的ini文件,则可以指定ini文件路径。
12.4.4写入INI数据
使用setValue(key,value)写入。
直接写入,以/表示Section/Key。
BeginGroup(Section);
setValue(key,value);
endGroup();
12.4.5读取INI数据
使用value(key)读取。
直接写入,以/表示Section/Key。
BeginGroup(Section);
value(key,value);
endGroup();
12.4.6示例
&&& //inisetting create and writing
&&& QStringstrIniFilePath=-&applicationDirPath()+&/npp.ini&;
&&& QSettingsiniSetting(strIniFilePath,QSettings::IniFormat);
&&& iniSetting.setValue(&section/a&,&a-value&);
&&& iniSetting.setValue(&section2/aa&,&aa-value&);
&&& iniSetting.beginGroup(&Group&);
&&& iniSetting.setValue(&x1&,&xx1&);
&&& iniSetting.setValue(&y1&,&xy1&);
iniSetting.endGroup();
&&& //inisettings reading
&&& QStringstrIniFilePath=-&applicationDirPath()+&/&+-&applicationName()+&.ini&;
&&& QSettingsiniSetting(strIniFilePath,QSettings::IniFormat);
&&& QStringstrPreceptList=iniSetting.value(&precept/precept&).toString();
&&& m_lstPreceptItem=strPreceptList.split(&,&);
&&& QStringstrTargetList=iniSetting.value(&target/target&).toString();
&&& m_lstTargetItem=strTargetList.split(&,&);
&&& iniSetting.beginGroup(&sql&);
&&& for(inti=;i&m_lstPreceptItem.size();++i){
&&&&&&& QStringstrSQL=iniSetting.value(m_lstPreceptItem[i]).toString();
&&&&&&& m_lstSQL&&strSQL;
&&&&&&& qDebug(strSQL.toStdString().c_str());
&&& iniSetting.endGroup();
13&&& OpenGL
OpenGL:平台无关的2D、3D图形标准API接口规范。其实现由硬件厂商完成。
在QT中所有OpenGL类都由QGLWidget派生。
继承此类时,需要重载三个保护函数:
intializeGL():初始化,设置GL参数。
resizeGL():改变大小时调用,完成后调用paintGL()。
paintGL():渲染时调用。
透视效果:远小近大。从视点到边界的角度为透视角,60度以内为正常,超过60则失真。
voidQMyGLWidget::initializeGL()
&&& glShadeModel();
&&& glClearColor(,,,);
&&& glClearDepth();
&&& glEnable();
&&& glDepthFunc();
&&& glHint(,);
voidQMyGLWidget::resizeGL(intwidth,intheight)
&&& if(height==)
&&&&&&& height=;
&&& glViewport(,,(GLint)width,(GLint)height);
&&& glMatrixMode();
&&& glLoadIdentity();
&&& gluPerspective(,(GLfloat)width/(GLfloat)height,,);
&&& glMatrixMode();
&&& glLoadIdentity();
floatfRot=;
voidQMyGLWidget::paintGL()
&&& glClear(|);
&&& glLoadIdentity();
&&& glTranslatef(-,,-);
&&& glColor3f(,,);
&&& glRotatef(++fRot,,,);
&&& glBegin();
&&& glColor3f(,,);
&&& glVertex3f(,& ,& );
&&& glColor3f(,-,);
&&& glVertex3f(-,& -,& );
&&& glColor3f(,-,);
&&& glVertex3f(,& -,& );
&&& glColor3f(,,);
&&& glVertex3f(,& ,& -);
&&& glColor3f(,,);
&&& glVertex3f(,& ,& );
&&& glColor3f(,,);
&&& glVertex3f(-,& -,& );
&&& glEnd();
&&& glLoadIdentity();
&&& glTranslatef(-,,-);
&&& glBegin();
&&& glVertex3f(-,& ,& );
&&& glVertex3f(& ,& ,& );
&&& glVertex3f(& ,-,& );
&&& glVertex3f(-,-,& );
&&& glEnd();
14&&& QtCreator
QtCreator不支持中文和带空格的路径,使用前要注意。
对于带空格的路径,使用$$quote(path)。
路径符号使用/或者\\。
在函数名称之前使用/**则自动生成Doxygen注释。
14.2 UI文件
代表界面布局。
14.2.1UI原理
使用ui文件来进行可视化布局。布局完成后编译,生成ui_xx.h文件,这个文件中包含类:
1)&& UI_XX:表明是某个mainwindow的UI文件,所有数据将以此对象为父对象。
2)&& namespace Ui::XX:这是个外壳类,供外部使用。
UI_XX类中包含所有的控件及setupUI(youWindow),retranslateUI()。setupUI()将以为指定的对象生成可视化布局的内容。retranaslateUI()将对编码进行转换。
14.2.2UI使用
使用UI时,只要将外壳类添加到声明,并将ui_xx.h头文件包含在要使用的cpp文件中,然后生成其对象,调用setupUI(this),就可以将ui内容在本对象中生成一份。
14.3 资源文件RCC和QRC
qrc文件用于指定资源的位置和名称。是一个xml文件,用于其它文件对资源的使用,目的是使用资源独立化。
使用rcc编译为二进制之后,变化rcc文件。
可以使用别名来指定真实资源的引用名称。
14.3.1术语
前缀/路径:就是路径,前缀专指顶级目录,一般用资源类型指定,标明其类型,路径就是在此类型下的路径,仅是代表一种关系,并没有真实的路径。
别名:被直接引用的名字称为别名,默认与实现路径相同,但是一般应该修改为简单的名称,便于引用,并与实际位置独立。
14.3.2使用方法
使用时其位置为(:前缀/路径/别名)。
icon.addFile(QStringLiteral(&:/image/myimage/uninstallxx.ico&), QSize(),QIcon::Normal, QIcon::Off);
而其实际的qrc文件为
&&& &qresourceprefix=&/image/myimage&&
&&&&&&& &filealias=&uninstallxx.ico&&xx0/xdfd/uninstall.ico&/file&
&&& &/qresource&
14.3.3编译
1)&& 可以手动使用rcc工具编译(不推荐):
&&&&&&&&&&& rcc -binary myresource.qrc -o myresource.rcc
手动编译完成后,要手动进行注册,才后使用:
&&&&&&&&&&& QResource::registerResource(&/path/to/myresource.rcc&);
2)&& 但更简便的方法是加入到pro文件中,由qmake自动编译、注册。
14.3.4编辑
可以在QtCreator中直接使用资源编辑器或文本编辑器编辑。也可以使用QtDesigner进行编辑。
14.4 编译和链接
可以在项目中设置构建目录设置输出目录。
14.4.1qmake
是一个专门为QT开发的,用于生成makefile文件的工具,可以用来生成各种平台上的各种工程文件。
默认为直接包含qt的库。如果不使用qt库,则CONFIG -= qt。
qmake 使用.pro为输入文件,然后生成makefile,例如:
qmake –oout.makefile test.pro
14.4.1.1 makefile 和make工具
在linux/unix上用于自动进行编译的工具,是一系统shell命令的集合,能够自动检测变化,并以此为依据进行更新编译。
14.4.2PRO文件
用于进行项目管理的文件。用于qmake生成makefile文件。
包含了项目的名称、类型、依赖的库等所有信息。
另外,还自动生成一个当前系统信息的xml文件pro.user文件。
不支持中文和带空格的路径,使用前要注意。
对于带空格的路径,使用$$quote(path)。
路径符号使用/或者\\。
多个值时,使用空格分开,如果需要换行,则使用\。
可以检测或简单的逻辑,
14.4.2.1 格式
&&& KEY += setset set
14.4.2.2 语法
编码类型:CODECFORSRC
项目类型:TEMPLATE
配置信息:CONFIG
头文件:HEADERS
源文件:SOURCES
目标文件名称:TARGET
目标文件路径:DESTDIR
库头文件:INCLUDEPATH
库文件:LIBS
库目录文件:LIBS += -LPATH
库文件:LIBS += -lfilename 或者LIBS +=
filename.lib
资源文件qrc:RESOURCES
rcc临时目录:RCC_DIR
rcc文件:RC_FILE
UI文件目录:UI_DIR
UI文件:FORMS
moc文件临时目录:MOC_DIR
object文件临时目录:OBJECTS_DIR
平台专用:win32{pro数据}
宏定义:DEFINES
14.4.2.3 关键字
1)&&&&&&&QT
QT += core gui …包含QT的模块。core是qt的核心模块,所有与QT有关的程序都要使用,gui是界面模块,其它模块查看帮助,按需添加。
默认自动添加core模块。
QT += core:将包含$(QTDIR)/include/QtCore,加入$(DTDDIR)/lib/qtcore4.lib,定义QT_CORE_LIB。
2)&&&&&&&CONFIG
加入编译选项。
可以选择加入的qt模块,输出的警告信息,release或者debug编译等。
默认包含qt。
3)&&&&&&&TEMPLATE
模板,表示项目将输出什么类型的文件。
app:输出可执行文件的makefile,如exe
lib:输出库文件的makefile
vcapp:输出可执行文件的vs工程文件
vclib:输出库文件的vs工程文件
subdirs:子工程目录的makefile文件
4)&&&&&&&取环境变量$$
$${a}:环境变量a的字符串。
$$(PATH):环境变量PATH的路径。
5)&&&&&&&其它
TARGET = name:生成文件名称,默认是项目名称。
TEMPLATE = app:当前项目模板为app模板,生成exe。
SOURCES += xx.cpp:所有源文件。
HEADERS += xx.h:所有头文件。
FORMS += xx.ui:所有UI文件。
LIBS += xx.lib:所有lib文件。
INCLUDEPATH+=xx\:所有头文件路径。注意:以\结束。
qDebug(),qWarning(),qFatal()均为全局函数。
qDebug(),qWarning():用法相同,但代表不同的级别。
qFatal():调用后会在显示信号后退出。
&QtGlobal&
Q_ASSERT():如果为FALSE,则中断并显示调试信息。
Q_CHECK_PTR():检查指针,如果为空,则调用qFatal()。
QDebug:#include &QDebug&
可以使用qDebug()函数直接输出。
使用printf()样式的格式化输出或使用&&样式的流输出。
资源:RC_FILE += xx.rc
rc格式:ID TYPE 属性 位置
14.6 内存泄漏检测
14.6.1使用vld,可以在debug模式下检测。
在Pro文件中加入:
&&& CONFIG(debug,debug|release){
&&&&&&& DEFINES+=_DEBUG
&&&&&&& #vld2.2downloadedfrom/
&&&&&&& VLD_PATH=$$quote(D:/ProgramFiles(x86)/VisualLeakDetector)
&&&&&&& INCLUDEPATH+=$$quote(D:/ProgramFiles(x86)/VisualLeakDetector/include)
&&&&&&& LIBS+=-L$$quote(D:/ProgramFiles(x86)/VisualLeakDetector/lib/win32)-lvld
在main文件中加入
#ifdef _DEBUG
#include &vld.h&
14.6.2使用vc时,可以使用VC的内存泄漏检测方法
使用dependents walker(depends.exe)(vc6和vc2003自身带有这个工具,但之后的vc版本不带,可以自由下载,是免费软件)可以检测程序的依赖项,然后复制到同一个目录下,作为NSIS安装使用。
NSIS:nullsoft scriptable install system。免费的win32安装、卸载程序。
HM NSIS EDIT:NSIS的IDE工具。
在HM NSIS EDIT的向导中,创建NSIS脚本,并编译,然后,就可以进行安装、卸载。
15&&& 进程间通信
15.1 剪贴板
QClipBoard。
由QApplication自动维护。不能自由创建。可以派生。
读写数据:SetData()/Data()及其它。
15.2.1原理
执行拖放操作时,分两步操作drag、drop,数据由QDrag传递,由QMimeData包装。
drag:拖时,需要放入原始数据(QDrag包装,在mousePressEvent()中定义)。然后执行exec(),此后由Drop处理事件接管(如果有相应的处理函数,则处理;如果没有,则无法确定),不再由mouseMoveEvent()处理。如果需要处理其它的,比如拖动的距离(防抖动)等,则需要将数据放入mouseMoveEvent()中执行exec。
当在dropEnterEvent()接收了Action之后,可以处理mousemove事件,由mouseMoveEvent()或DragMouseMoveEvent()处理move事件。
注意:QDrag在执行完exec()后,drop处理程序接管,这很关键。
注意:QDrag和QMimeData由QT处理,不能删除。如果exec()返回MoveAction,则应该删除Data。
15.2.2细节
拖放起效最小时间:QStyleHints::startDragTime()
拖放起效最小距离:QStyleHints::startDragDistance()
拖放最慢速度:默认为0。QStyleHints::startDragVelocity()
dragenterevent:QDragEnterEvent。当可以接收数据时,进入控件则发出。只能在此事件处理程序中接受了Action,才能继续接受move。
dragmovevent:QDragMoveEvent。可以设置接受的Rectangle。
dragleaveevent:QDragLeaveEvent。如果没有QDropEvent发布,则离开时发布此事件。
dropevent:QDropEvent。能够接受此Action。
拖放数据读写:QMimeData。
接收拖放数据:setAcceptDrops(true)。查看EVENT的性质,如果能够处理,则接受。只有这里接受了,move,leave事件才能起作用。
结束拖放:accept()。
QMimeData:用于剪贴板和拖放的数据。
使用:被用于QDrag、QClipBoard的传输。
读写数据:setData()/Data()及其它便捷函数。
开始拖数据:
重载mousePressEvent():
判断当前拖的状态:左键按下,并且在指定的范围内。
创建QDrag对象,并设置数据。
QDrag执行exec()。
16&&& 国际化QString
Qt内部使用Unicode。在使用与用户交互的UI中,都使用QString,遇到char时,将强制转换为QString。QString具有转换为std::string的功能。应尽量使用QString避免转换。
在国际化方面,任何编码,只要能够与Unicode进行互转,就能够在Qt中正确显示。所以在Qt中进行转码,必须使用Unicode中间层。
为了使用翻译,应该在源码和ui中全部使用英语,然后添加翻译文件以运行不同的国际化需要。
16.1 QString
16.1.1内存结构
Qt内部的字符串使用Unicode作为字符单位,每个字符由一个QChar表示,QChar由16bit的Unicode表示。如果要与Ansi进行转换,需要转换为QLatin1Char(由8bit的ansi表示)。可以使用QString::data()获取QChar的字节指针(16bitUnicode)。
在Qt中字符串指针(char *)由QByteArray实现,但是其实现时,为节省内存,使用写时复制技术(如果无变化,则使用同一段物理内存)。QByteArrsy::size()只统计有效字符个数,但其保证为每个字符串后有一个’\0’。
默认情况下,QByteArray使用deep-copy,如果不需要,则可以使用QByteArray::fromRawData()。也因此,只有在具有一个完整的QByteArray对象时才能进行读写操作。
16.1.2格式化输出
格式化,不再使用printf样式的格式化,
使用%n,加arg(value)设置。
QStringstrSQL=str1.arg(“aa”);
格式化之后原字符串不变,返回格式化之后的字符串。
16.1.3格式转换
QString-&char *:只能先转换为QByteArray(将16bit转换为8bit)(QString::toLatin1()或toAscii()(由于此函数与toLatin1()过于相似,已经于Qt5中去除)或toLocal8bit()),再进行转换,不可以级连转换。
QString-&std::string:QString::toStdString()。
16.2 QT国际化原理
1)&&&& 首先在源程序中使用tr()函数,标记要进行翻译的字符串。
2)&&&& 然后在一个.qm的二进制翻译文件中:查找所有tr(),并放入源字符串和目标字符串,翻译为二进制文件。
3)&&&& 在程序中加入相关的翻译信息,在运行时遇到tr()就会自动查找翻译文件,找到则替换,否则使用源字符串。
1)&& 创建tr()条目:在需要进行翻译的地方设置标记。
2)&& 创建.qm二进制翻译文件
a)&& 在.pro中添加翻译文件(xml,由lupdate生成,这里只需要添加名称)
b)&& 然后调用lupdate(命令行)进行翻译,得到本工程中所有的tr()标记(输出到xml文件中)的xml文件,
c)&& 调用linguist为xml的条目作为翻译,并将译好的xml翻译为二进制qm(文件-)发布)(快一点,并且保密啊)(也可以手动修改或用其它工具修改)。
&&&&&&&&&&&&&i.&&&&&xml文件:每个翻译条目都由一个message节处理。包含源文件定位(location),源字符串(source),翻译注释(translatorcomment),翻译字符串(translate)。
&&& &message&
&&&&&&& &locationfilename=&mainwindow.cpp& line=&356&/&
&&&&&&&&source&Translate&/source&
&&&&&&&&translatorcomment&目标注释&/translatorcomment&
&&&&&&& &translationtype=&unfinished&&目标字符串&/translation&
&&& &/message&
&&&&&&&&&&&&&&&&&&&&&&&&ii.&&&&&&&&&这里要注意:linguist可以从xml翻译文件中找到源文件,并标明出处。
d)&&&& UI翻译:在使用designer进行界面设计时,每个界面元素都被标准为tr(),可以在xml文件中进行翻译。
3)&& 在源文件中应用翻译:使用QTranslator的对象,调用load()加载.qm文件(指定绝对路径)。然后appliation对象调用installTranslator()装载QTranslator对象就可以了。
16.3.1 示例
1)&& 创建tr()条目
voidMainWindow::createUIItems()
&&& //方案选项
&&& QStringListlstPreceptI
&&& lstPreceptItem&&tr(&totalReduce&)&&tr(&unitReduce&);
&&& ui-&comboBox-&addItems(lstPreceptItem);
&&& m_lstPreceptItem=lstPreceptI
&&& //作用目标选项
&&& QStringListlstTargetI
&&& for(inti=;i&m_lstTargetItem.size();++i){
&&&&&&& lstTargetItem&&(tr(m_lstTargetItem[i].toStdString().c_str()));
&&& ui-&comboBox_2-&addItems(lstTargetItem);
2)&& 创建qm文件
a)&& 添加ts文件
TRANSLATIONS+=npp.ts
b)&& 生成qm文件
调用 lupdate xx.pro 生成npp.ts
linguist 打开npp.ts,添加翻译内容,发布后生成npp.qm
3)&& 使用qm文件
&&& //translationsetting
&&& QStringstrTranslateFilePath=-&applicationDirPath()+&/npp.qm&;
&&& QTranslatorqtT
&&& qtTranslator.load(strTranslateFilePath);
&&& a.installTranslator(&qtTranslator);
&&& QTranslatorqtTranslator2;
&&& qtTranslator2.load(-&applicationDirPath()+&/qt_zh_CN.qm&);
&&& a.installTranslator(&qtTranslator2);
16.4 手动显示中文
1)&& QString::fromUtf8()
2)&& 如果设置之后仍然提示,可能与源代码的编译有关,在源码上右击,点击保存时使用utf-8 bom。
3)&& 如果需要手动翻译几个文字(不推荐这样使用,很容易出现问题,且不易排查,最好使用tr),可以使用将文件转换为unicode的方法加以显示。
char *pTotal = &总消减率最高&;
QString strTotal = m_pCodec-&toUnicode(pTotal,strnlen(pTotal,20));
17 &&&&&& 日期时间
17.1 日期QDate
只能进行日期的读取和比较和运算(dayto)。
当前日期:currentDate()。
格式:在toString()函数中可以指定输出格式。
17.2 时间QTime
用于时间显示和定时器(应用广泛,计算程序用时等)。
当前时间:currentTime()。
格式:在toString()函数中指定。
定时器:start(),restart(),elapsed()。
17.3 日期时间QDateTIme
综合使用QDate和QTime。
将QDate和QTime的值赋予QDateTIme。
18&&& 可移植性
尽量使用QT的类和函数,即使是标准库文件,在不同的平台上实现也不同,但QT在不同的平台上能很好的保持一致。
对于无法移植的功能,可以使用相同名字的类,并放入不同文件中,根据平台选择。或者是在同一个头文件中声明,但在不同的CPP文件中实现。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:81050次
积分:2430
积分:2430
排名:第12594名
原创:161篇
评论:29条
(1)(10)(4)(12)(18)(14)(16)(8)(4)(6)(6)(11)(4)(4)(4)(4)(4)(4)(4)(8)(4)(4)(11)

我要回帖

更多关于 qt tr 头文件 的文章

 

随机推荐