微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Qt&Kdevelop技巧集

Qt&Kdevelop技巧集

时间:09-12 来源:互联网 点击:

文本文件

All files(*) ; //可选择显示所有文件

QString Filepathname=QFileDialog::getOpenFileName( ,filter,this);//弹出对话框,这句需要加载头文件(#include qfiledialog.h >)

11.将当前日期时间转化为标准Qstring.

QDateTime currentdatetime =QDateTime::currentDateTime();//需要加载头文件(#include qdatetime.h >)

QString strDateTime=currentdatetime.toString();

12.设置定时器

所有Qobject的子类在设置定时器时都不必加载一个Qtimer对象,因为这样造成了资源浪费且需要书写多余的函数,很不方便.最好的办法是重载timerEvent函数,具体写法如下:

class Gui_DlgViewCtrlDatum : public QDialog

{

Q_OBJECT

public:

Gui_DlgViewCtrlDatum( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );

~Gui_DlgViewCtrlDatum();

protected:

void timerEvent( QTimerEvent * );

};

void Gui_DlgViewCtrlDatum::timerEvent( QTimerEvent *e )

{

//statements

}

再在Gui_DlgViewCtrlDatum的构造函数中设置时间间隔:

startTimer(50);//单位为毫秒

这样,每隔50毫秒,函数timerEvent便会被调用一次.

13.最方便的几何布局类QGridLayout

在QT的几何布局类中,笔者认为QgridLayout使用最为方便,举例如下:

QGridLayout* layout=new QGridLayout(this,10,10);//创建一个10*10的QgridLayout实例

layout->addMultiCellWidget(gui_dlgslab_glwnd,1,8,0,7);//将OpenGL窗口固定在QgridLayout中的(1,0)单元格到(8,7)单元格中

layout->addMultiCellWidget(Slider1,0,9,8,8);//将一个slider固定在单元格(0,8)到(9,8)中

layout->addWidget(UpLimitLbl,1,9);//将一个label(UpLimitLbl)固定在单元格(1,9)中

这样,无论窗体大小如何改变,它们的布局方式都不会发生改变,这比反复使用QvboxLayout和QhboxLayout要方便快捷许多.

注:使用几何布局类需要调用头文件(#include )

14.字符串类Qstring和字符串链表类QstringList.

Qstring是Qt中标准字符串类,下面列出它的一些常用函数:

toInt():将字符串转化成int类型.

ToFloat():将字符串转化成float类型.

ToDouble():将字符串转化成double类型.

Left(n):从左起取n个字符

Right(n):从右起取n个字符

SetNum(n):将实数n(包括int,float,double等)转化为Qsting型.

QstringList是大家比较少使用的类,它可以看成Qstring组成的链表(QT中标准链表类Qlist的函数对它都适用,它的单个节点是Qstring类型的),特别适合与处理文本,下面一段代码就可见其方便快捷:

Qstring strtmp=”abc|b|c|d”;

QstringList strlsttmp;

Strlsttmp =QStringList::split(|, strtmp);

For(unsigned int I=0;I Strlsttmp.count();I++)

{

cout Strlsttmp.at(I);

}

结果输出为:abc b c d,也就是说,通过一个函数split,一行文本就被符号”|”自动分割成了单个字符串.这在文本处理时特别省力.(请参考c语言大全第四版中用”strtok”函数分割文本的例程,将双方比较一下)

15. QGLWidget类如何加入鼠标支持.

QGLWidget类加入鼠标支持需要重载以下函数:

void mousePressEvent(QMouseEvent*);

void mouseMoveEvent(QMouseEvent*);

void mouseReleaseEvent(QMouseEvent*);

请具体看一个实例:

class Gui_WgtMain_GLWnd : public QGLWidget {

Q_OBJECT

public:

Gui_WgtMain_GLWnd(QWidget *parent=0, const char *name=0);

~Gui_WgtMain_GLWnd();

protected:

void initializeGL();

void paintGL();

void resizeGL( int w, int h );

void mousePressEvent(QMouseEvent*);

void mouseMoveEvent(QMouseEvent*);

void mouseReleaseEvent(QMouseEvent*);

private:

int m_nCnt;

};

void Gui_WgtMain_GLWnd::mousePressEvent(QMouseEvent* e)

{

//statements

}

void Gui_WgtMain_GLWnd:: mouseMoveEvent (QMouseEvent* e)

{

//statements

}

void Gui_WgtMain_GLWnd:: mouseReleaseEvent (QMouseEvent* e)

{

//statements

}

其中, e->x();e->y();可以获得鼠标的位置, e->button()可以取得鼠标按键的状态(左中右键以及ctrl,alt,shift等组合键),灵活使用他们就可以在用鼠标操作OpenGL画面了.

16.由ui文件生成.h和.cpp文件

生成.cpp文件

$uic myform.ui -i myform.h -o myform.cpp

生成.h文件

$uic myform.ui -o myform.h

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top