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

从零开始做3D地图编辑器(五)(基于QT与OGRE)

2010-05-18 17:17 323 查看
第一步,先把window封装起来,我新建一个MainWidget类,继承自QWidget类,类的头文件如下:
#ifndef _MAIN_WIDGET_H_

#define _MAIN_WIDGET_H_

#include <QtGui/QLabel>

#include <QtGui/QHBoxLayout>

#include <QtGui/QWidget>

#include <QtGui/QPushButton>

class MainWidget: public QWidget

{

public:

MainWidget();

~MainWidget();

protected:

private:

QLabel*                               m_pLabel;

QPushButton*          m_pButton;

QHBoxLayout*                   m_pLayout;

};

#endif

CPP如下:

#include "MainWidget.h"

MainWidget::MainWidget()

{

m_pLabel = new QLabel("World");

m_pLabel ->setGeometry(50,50,300,300);

m_pButton = new QPushButton ("HELLO");

m_pButton ->setGeometry(100,100,300,300);

m_pLayout = new QHBoxLayout();

m_pLayout -> addWidget(m_pButton);

m_pLayout -> addWidget(m_pLabel);

connect(m_pButton, SIGNAL(clicked()), this, SLOT(close()));

setLayout(m_pLayout);

}

MainWidget::~MainWidget()

{

}

Main.cpp改为:
#include <QtGui/QApplication>

#include "MainWidget.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWidget window;

window.show();

return a.exec();

}

编译运行,结果和上次一样。
接下来申请一个自定义Slot,首先在头文件public:前加入宏
Q_OBJECT;
只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。这点很重要,不然你编译的时候会报“找不到slot”的错误。
然后在protected: 前加入:

private slots:

void                              SetText ();

slot同样也分private、public、protected,意义和c++一样。
CPP中加入相应执行:

void MainWidget:: SetText ()

{

m_pLabel -> setText("Test");

}

把connect改成:
connect(m_pButton, SIGNAL(clicked()), this, SLOT(SetText ()));

编译运行,这时点击按钮就会改变文字了。就这么简单。
信号也可以自定义,不过信号自定义相对来说用武之地稍微小一点,定义的方式和slot定义差不多,都得在头文件中定义,举个例子:点击按钮后文本改变,触发一个新信号,这个信号会把文字又变回来。
在头文件中加入:

signals:

void TextChanged ();

再增加一个Slot用来对这个信号进行反馈。在private slots:后加入
void                              RecoverText ();

CPP中加入执行:

void MainWidget::RecoverText()

{

m_pLabel -> setText("Hello");

}

注意信号是不需要加执行代码。
然后修改SetText()函数加入触发新信号的代码:
emit TextChanged();

最后加入新的connect:
connect(this, SIGNAL(TextChanged()), this, SLOT(RecoverText()));

编译运行,结果和我们想要的一样。

注:信号和槽都是可以有参数的。

有关QT的基础知识就介绍到这里,具体控件的使用方法,请自行参考助手。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: