您的位置:首页 > 编程语言 > Qt开发

QT4 Creator下的图形界面编程入门

2013-01-04 15:29 232 查看
1) Qt4 creator的使用
新建工程:
进入Applications -> Programming -> Qt Creator,启动Qt Creator,进入File
-> New,选择Projects/Qt4 Gui Application,设置工程保存路径和工程类型,就建立好了一个新的图形界面工程。
编译运行工程:
进入Build -> Build All,编译通过后,进入Build -> Run,就可以运行起来程序。另外在Debug菜单下提供了丰富的程序调试功能。

2)
QT提供的常用窗口及控件类
class QWidget:
基础窗体类
class QPushButton:
命令按钮类
class QFrame:
框架窗体类
class QLabel:
标签类

3)
信号和槽
信号是在对象内部状态发生改变的时候产生的,是一种特殊类型的函数,当某个事件(如鼠标点击,程序退出,键盘按键,对象属性更改等等)发生的时候就被发射。
槽是对象的成员函数,它既可以像普通函数一样直接调用,也能够和信号关联。

创建和定义用户槽:
在类声明中加入Q_OBJECT宏的调用,
在用户槽的类声明中加入slots(可以是public, protected, private类型之一)关键字,
用原对象编译器MOC由类声明的头文件生成c++可识别代码,如moc-qt4
classDeclare.h –o classDeclare.moc,
在类定义文件(cpp文件)中包含上述moc文件或者从moc文件和cpp文件创建目标文件,
在类定义文件中定义用户槽。

创建和使用用户信号:

在类声明中加入Q_OBJECT宏的调用,

在用户信号的类声明中加入signals关键字,

在类定义文件(cpp文件)中事件发生的地方,用emit来发射信号,如emit
UserSignal(param),

在类定义文件中合适的地方(如类的构造函数),用connect将信号和槽关联起来,如connect(this,
SIGNAL(UserSignal(param)), this, SLOT(UserSlot(param)))。

在类定义文件中需要的地方,用disconnect将信号和槽断开。

4)
定时器
QT中提供了QTimer类来管理定时器功能,其使用方法如下:
定义一个QTimer对象,如QTimer *timer = new QTimer(this),
用connect将timeout信号与定时处理槽关联起来,connect(timer,
SIGNAL(timeout()), this, SLOT(TimeoutSlot())),
在类定义文件中定义定时器处理槽,
在需要的地方开启或者关闭定时器,如timer->start(1000),timer->stop()。

另外,QObject类已经定义了成员虚函数timerEvent()来处理timeout信号,这样就有如下的方法:
在类定义文件需要的地方,用startTimer()来开启定时器,
重载类的成员虚函数timerEvent()来进行相应的定时器处理,
在类定义文件需要的地方,用killTimer()来关闭定时器。

5)
pro文件的工程设置
利用Qt Creator新建工程,会自动生成工程的编译配置文件
- pro文件,此文件会在编译工程时,影响Makefile的内容,通过手工修改pro文件的内容,可以更大限度地扩展Qt
Creator的集成开发功能,以下介绍几个重要的字段:
OBJECTS_DIR:
用于指定.o文件的输出目录,如OBJECTS_DIR = ./output/
INCPATH:
指定源文件中包含文件的搜索路径,如INCPATH += ../MyDir1 ./MyDir2/Dir3
TARGET:
指定最终生成可执行文件的名字,如TARGET = ../execDir/execFile
DEFINES:
指定工程的预定义宏,如DEFINES += LINUX32 MYDEBUG
HEADERS:
工程所编译的头文件
SOURCES:
工程所编译的源文件

6)
绘制2D图形
Qt提供了QPainter类来创建用户图形,其使用十分简单和直观。
重载绘图对象的类的成员虚函数paintEvent(),
在类定义文件中paintEvent()函数的实现体中调用QPainter::begin()和QPainter::end()来启动和停止绘图,将绘图的实现代码放在这二者之间即可,如
void MyDrawWnd::paintEvent(QPaintEvent *qp)
{

QPushButton::paintEvent(qp);

QPainter paint;

paint.begin(this);

paint.drawEllipse(2, 2, this->width()-4, this->height()-4);

paint.end();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: