一步一步做QT设计.docx

上传人:b****6 文档编号:4302620 上传时间:2022-11-29 格式:DOCX 页数:17 大小:322.47KB
下载 相关 举报
一步一步做QT设计.docx_第1页
第1页 / 共17页
一步一步做QT设计.docx_第2页
第2页 / 共17页
一步一步做QT设计.docx_第3页
第3页 / 共17页
一步一步做QT设计.docx_第4页
第4页 / 共17页
一步一步做QT设计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

一步一步做QT设计.docx

《一步一步做QT设计.docx》由会员分享,可在线阅读,更多相关《一步一步做QT设计.docx(17页珍藏版)》请在冰豆网上搜索。

一步一步做QT设计.docx

一步一步做QT设计

一步一步做QT设计

 

目  录

第一章界面设计器3

第1节界面设计效果3

第2节界面设计3

第3节添加槽与连接7

第4节建立工程8

第二章QmainWindow11

第三章QdockWindow11

第四章菜单栏15

第五章QT在UNIX中的安装和使用16

第1节QT在UNIX中的安装16

第2节QT在UNIX中的使用17

网络QT教程:

第一章界面设计器

第1节界面设计效果

在这一张我们介绍用QT的设计器来设计一个程序界面,其效果图如(图1.1)所示

图1.1.1 程序界面设计效果

程序最上面是标准的“标题栏”和“菜单栏”。

在左边是一个DockWindow里面有一个QlistView控件,用来存放表名称。

在右边是一个QtabWidget控件和和一个QlistView竖直排列。

当用户在左边点击一个表名之后,右边就显示相应的表的内容。

如用户点击厂站表“FactoryName”后在右边就显示各厂站的id号,名称。

第2节界面设计

在windows上安装完QT3.2.1非商业版后,点击“开始”-“程序”-“Qt3.2.1non-commercial”-“QtDesigner”打开如图所示的设计器

图1.2.1QT设计器界面

在这里我们选择 MainWindow点击“OK”按钮。

打开如(图1.2.2)所示。

图1.2.2 标准菜单选择器

我们采用默认设置。

点击“Next”进入下一步。

打开如(图1.2.3)所示的界面。

图1.2.3 标准工具栏设置

采用默认设置。

点击“Next”进入下一步。

打开如(图1.2.4)所示的界面

    

图1.2.3 标准工具栏设置

    

图1.2.4 向导完成界面

点击“Finish”关闭向导,这时向导已经完成了一个如(图1.2.5)所示的界面

    

图1.2.5 向导完成的界面

点击窗口的空白处然后在属性(properties)窗口中把“name”的内容由“Form1”改为“MainFrm”。

把“Caption”的内容由“Form1”改为“RdbView”。

下面加入QtabWidget和QlistView控件。

在设计器的左边是一个outLook风格的窗口,里面分栏列出了各个控件。

点击“Containers”栏。

在展开的“Containers”栏中选择“TabWidget”再用鼠标左键在已经建好的窗口中点击一下。

这样界面上就出现了一个“QTabWidget”控件。

用同样的方法加入一个“Views”栏中的“ListView”控件。

按下表修改“QTabWidget”的部分属性。

属性名称

属性内容

说明

name

tabTable

控件名称

sizePolicy

Expanding/Fixed/0/0

控件大小策略:

水平方向自动拉伸/垂直方向大小固定/水平方向空白大小为0/垂直方向空白大小为0

minimumsize

[0,0]

控件的最小长度和宽度都为0

按下表修改ListView的部分属性

属性名称

属性内容

说明

name

DataList

控件名称

设置完后,点击窗口的空白处,选中主窗口。

然后点击设计器菜单栏中的“Layout”-“LayoutVertically”为主界面加入垂直布局器。

这时候控件的大小会随着主界面大小的改变而改变。

第3节添加槽与连接

点击设计器的菜单栏中的“edit”-“Slots”打开如“图1.3.1”所示的对话框

图1.3.1 函数编辑窗口

点击“NewFunction”可以添加一个新的函数。

按下表添加函数:

Function

Returntype

Specifier

Access

Type

DataListRightClick(QListViewItem*pItem,constQPoint&Pt)

void

virtual

public

slot

DataListSelChange(QListViewItem*pItem)

void

virtual

public

slot

TabTableSelChange(QWidget*pWid)

void

virtual

public

slot

ShowTableNameList()

void

virtual

public

slot

表中的Function是函数名称和参数列表,Return是函数返回类型。

Specifier是函数的描述符。

Access是函数的访问类型。

Type是函数的类型,slot表示槽函数,function表示普通道函数。

槽函数可以接收信号来执行。

其它方面和普通函数完全一样。

DataListRightClick(QListViewItem*pItem,constQPoint&Pt):

鼠标右击DataList控件时调用的函数。

pItem是右击的行,

Pt鼠标右击的位置

DataListSelChange(QListViewItem*pItem):

当DataList控件被选中的行改变时调用此函数

pItem当前补选中的行

TabTableSelChange(QWidget*pWid):

tabTable控件选中项改变时调用此函数

pWid当项被选中的项。

为了使槽函数能真正接收信号而工作。

必须把槽和信号进行连接。

点击菜单栏中的“edit”-“connections”打开如(图1.3.2)的对话框

图1.3.2 设置连接对话框

按下表建立新的连接

Sender

Signal

Receiver

slot

tabTable

currentChanger

MainFrm

TabTableSelChange

DataList

selectionChanged

MainFrm

DataListSelChange

DataList

rightButtonClicked

MainFrm

DataListRightClick

设置好连接后,一个程序界面就做完。

点击保存按钮,把设计好的界面保存到D:

\RdbView\ManFrm.ui中。

第4节建立工程

在文件夹D:

\RdbView\ 中新建两个文件:

MainWork.h和MainWork.cpp

其中MainWork.h的内容为

////////////////////////////////////////////

//MainWork.h

/////////////////////////////////////////////

#ifndefMAINWORK_H

#defineMAINWORK_H

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include"MainFrm.h"

#include"TabNameList.h"

#include"TabMgr.h"

externMainFrm*g_pMainFrm;

externCTabNameList*g_TabNameList;

externCTabMgr*g_pTabMgr;

intmain(intargc,char*argv[]);

#endif

MainWork.cpp的内容为:

MainWork.cpp完成主函数的定义。

第10行定义了一个QApplication对像用来管理应用程序范围的资源。

Qapplication。

第11行申请了一个MainFrm对象。

MainFrm就是刚才用QT设计器设计的程序的主界面。

它的内容在下一章再作祥细介绍。

第12行设置MainFrm为主窗口。

第14行显示主窗口。

窗口是被隐藏创建的,在显示之前可以自定义窗口,而避免窗口闪烁。

第15行把应用程序的控制传递给QT。

这时,程序进入一种等待模式,等待用户的动作。

如鼠标点击,按键被按下等等。

现在我们就可以测试这个程序了。

点击“开始”-“运行”输入“cmd”打开命令行窗口。

转到D:

\RdbView目录下,请输入(蓝色字体部分):

D:

\RdbView>Qmake–project

这时在D:

\RdbView目录下新产生一个RdbView.pro文件。

我们要在VC中使用QT所以在命令行窗口中再输入:

D:

\RdbView>Qmake–tpvcRdbView.pro

这时在D:

\RdbView中产生一个新的文件“RdbView.vcproj“,用VC2003打开这个文件进行编译。

编译后运行可执行文件如(图1.4.1)所示

图1.4.1 程序运行界面

第二章QmainWindow

打开D:

\会发现有编译过程中新产生了MainFrm.h,MainFrm.cpp和MainFrm.ui.h三个文件。

这三个文件根据设计器所设计的界面自动产生。

特别要注意的是MainFrm.h,MainFrm.cpp这个文件会随着设计器对界面的修改,而重新生成。

“qmake“命令产生工程文件也会导致 MainFrm.h,MainFrm.cpp这两个文件重写。

因此应尽量避免手工修改这两个文件。

应该用设计器来添加函数和连接。

设计器所设计的槽和一般函数定义在MainFrm.ui.h文件中。

此文件可以写工修改,而事实上我们也正是这么做的。

第三章QdockWindow

在我们最初的设计中,主窗口的左边有一个QdockWindow但是我们使用设计器的时候并没有设计这个窗口。

我们将手工实现这个功能。

先给工程添加一个头文件TabNameList.h其内容如下

第8行到第12定义了一个结构用来保存表名称和表ID号的对应关系。

第13行和第14行以QlistView为基类定义了一个新类CTabNameList。

第16行为了使用信号和槽,在类定义的开始处必需有Q_OBJECT宏。

包含Q_OBJECT宏后,由qmake生成的makefile将会包含特定的规则来运行QT的元对象编译器(moc,meta-objectcompiler)。

第19行和第20行申明了构造函数和析构函数。

第31行表示其后的函数是槽,它可以和信号相连接。

为了实现CTabNameList的功能再为工程添加一个实现文件TabNameList.cpp.

先介绍构造函数的部分内容。

类CTabNameList继承自QlistView这个类,QlistView既可以实现树行结构也可以实列表结构。

在此处只需要实现树行结构。

为了实现树型结构先看一下函数

QlistViewItem:

:

QListViewItem(QListViewItem * parent,QListViewItem * after)

这是类QlistViewItem的构造函数。

QlistViewItem可以看作是QlistView的一个节点(如果是列表结构可以看作一行)。

Parent可以看作父节点。

After可以看作同一层次的前一个节点。

通过设置父节点和前一节点。

就可以建立如图1.1.1所示的树型结构。

在头文件中,定义了一个槽selectChanged要使这个槽能真正的工作,还必须使其和一个信号相连接。

只有和信号相连接的槽才能由信号来执行。

连接函数为:

connect(sender,SIGNAL(signal),receiver,SLOT(slot));

sender和receiver是指向QObject的指针,signal和是不带参数名称的函数签名。

SIGNAL()宏和SLOT宏实质上会把它们的参数转换成字符串。

信号和槽的连接有几个规则:

1一个信号可以被连接到多个槽

2多个信号可以连接到一个槽

3一个信号可以被连接到另外一个信号

4连接可以用disconnect移除

5信号和槽必须有相同的参数和顺序

6信号的参数多于槽的参数时,信号的多余的参数将被忽略。

connect(this,SIGNAL(currentChanged(QListViewItem*)),

this,SLOT(selectChanged(QListViewItem*)));

上面就是selectChanged槽和信号currentChanged信号相连的语句。

这里接收和发送的信号的都是CTabNameList对象本身。

currentChanged信号当用户改变了选择的节点的时候产生。

QListViewItem*是新选中的节点的指针。

为了显示树型结构,需要在主函数中增加几条语句。

首先在MainWork.h中包含头文件。

然再加入下面的黑体部分

externMainFrm*g_pMainFrm;

externCTabNameList*g_TabNameList;

intmain(intargc,char*argv[]);

再在MainWork.cpp文件中加入下面的黑体部分

#include"MainWork.h"

MainFrm*g_pMainFrm;;

CTabNameList*g_TabNameList;

intmain(intargc,char*argv[])

{

QApplicationapp(argc,argv);

g_pMainFrm=newMainFrm;

app.setMainWidget(g_pMainFrm);

QDockWindow*pDocTabName=newQDockWindow(g_pMainFrm,("TableName"));

pDocTabName->setResizeEnabled(TRUE);

pDocTabName->setVerticalStretchable(TRUE);

g_pMainFrm->addDockWindow(pDocTabName,Qt:

:

DockLeft);

g_pMainFrm->setDockEnabled(pDocTabName,Qt:

:

DockTop,FALSE);

g_pMainFrm->setDockEnabled(pDocTabName,Qt:

:

DockBottom,FALSE);

pDocTabName->setCloseMode(QDockWindow:

:

Always);

g_TabNameList=newCTabNameList(pDocTabName);

pDocTabName->setWidget(g_TabNameList);

g_pMainFrm->show();

returnapp.exec();

}

QDockWindow是一个浮动窗口。

它的父窗口是主窗口。

pDocTabName->setResizeEnabled(TRUE)使用浮动窗口可以改变大小。

pDocTabName->setVerticalStretchable(TRUE);浮动窗口在垂直方向可以随着父窗口大小的改变而改变。

g_pMainFrm->addDockWindow(pDocTabName,Qt:

:

DockLeft);放置浮动窗口到主窗口的左边。

g_pMainFrm->setDockEnabled(pDocTabName,Qt:

:

DockTop,FALSE);

g_pMainFrm->setDockEnabled(pDocTabName,Qt:

:

DockBottom,FALSE);浮动窗口不可以放置在主窗口的顶部和底部。

pDocTabName->setCloseMode(QDockWindow:

:

Always);浮动窗口可以关闭。

g_TabNameList=newCTabNameList(pDocTabName);申请个CTabNameList对象。

pDocTabName->setWidget(g_TabNameList);把g_TabNameList放置到浮动窗口中。

增加完后。

重新编译程序就到如(图3.1.1)所示的窗口。

图3.1.1 程序界面

 

第四章菜单栏

在第三章中为主界面增加了一个漂亮的浮动窗口。

但是如果关闭了浮动窗口,除了重启程序外无法再打开浮动窗口。

这一章我们介绍在菜单栏中增加一个菜单来实现浮动窗口的显示与隐藏。

用QT设计器打开D:

\RdbView\MainFrm.ui文件。

图4.1.1 添加View菜单

按(图4.1.1)所示增加一个新的菜单。

按下表修改ShowTabName菜单的属性

属性名称

属性内容

name

ShowTabNameList

text

ShowTabName

menuText

Show&TabName

在第一章第三节添加了一个槽 ShowTableNameList()现在我们按下表把槽和信号相连接

Sender

Signal

Receiver

slot

ShowTabNameList

Activated()

MainFrm

ShowTableNameList()

在头文件MainFrm.ui.h中包含MainWork.h文件然后修改ShowTableNameList()的实现

voidMainFrm:

:

ShowTableNameList()

{

if(((QDockWindow*)(g_TabNameList->parent()))->isShown())

{

((QDockWindow*)(g_TabNameList->parent()))->hide();

}

else

{

((QDockWindow*)(g_TabNameList->parent()))->show();

}

}

现在重新编程运行程序,点击“View”-“ShowTableName”试试看。

第五章QT在UNIX中的安装和使用

第1节QT在UNIX中的安装

1.改变目录到你相要的安装QT的目录下。

复制光盘中“X11”文件夹下的三个文件“qt-x11-free-3.2.1.tar.gz”到当前目录下。

Cp/cdrom/x11/qt-x11-free3.2.1.tar.gz.

假设你的光盘挂载在 /cdrom下;

2.解压缩此文件

Gunzipqt-x11-free-3.2.1.tar.z

Tarxfqt-x11-free-3.2.1.tar

解压完后当前目录下应该新建了一个文件夹“qt-x11-free-3.2.1”此文件夹中存放了解压后的文件。

此处要注意的是文件名“qt-x11-free-3.2.1.tar.z”很长有些系统可能对文件名进行截短,显示为”t-x11~1”解压缩的时候应该以系统显示的名称为准。

3.设置环境变量

QT所使用的环境变量根据shell的不同设置方法也不同。

这里只介绍在bash、ksh、zsh或者sh中设置QT所用的环境变量。

打开“.profile”文件。

在文件的结尾处加入下面语句

QTDIR=/usr/local/qt-x11-free-3.2.1

PATH=$QTDIR/bin:

$PATH

MANPATH=$QTDIR/doc/man:

$MANPATH

LD_LIBRARY_PATH=$QTDIR/lib:

$LD_LIBRARY_PATH

ExportQTDIRPATHMANPATHLD_LIBRARY_PATH

其中的“/usr/local/qt-x11-free-3.2.1”是指刚才解压过程中新生成的文件夹。

4.使用configure工具构建QT库和它提供的工具

把当前目录转到“/usr/local/qt-x11-free-3.2.1”,然后敲入“./configure”再根据提示输入“yes”就会产生makefile文件。

如果在产生makefile文件的过程中出现“gmake:

CC:

commandnotfound”这样的错误,请输入“./configure-platformsolaris-g++”试试。

5.“configure”运行成功后请输入 gmake 进行安装。

如果安装正确,在当前目录下的bin文件中应该有qmake命令。

第2节QT在UNIX中的使用

这里说明把一个在windows系统中做的QT软件转到UNIX中所要注意的一些细节问题和在UNIX中编译QT文件的方法。

1.在VS2003和VS2005中使用#pragmaonce开关防止多次编译,移值到UNIX中应该改成

#ifndefTABMGR_H

#defineTABMGR_H

//……………………//

#endif

2.用VS2003和VS2005自动生成的类会在资源文件中包含其头文件时会使用#include”./tabmgr.h” 这种形式在unix中编辑不通过,应该改成 #include”TabMgr.h”。

“TabMgr.h”为真实的文件名。

3.把当前目录转到工程所在的目录RdbView下输入:

Qmake–project

产生工程文件。

如RdbView.pro;

4.输入:

QmakeRdbView.pro

产生makefile文件。

5.输入make或gmake进行编译产生可执行文件:

RdbView。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1