从零开始做3D地图编辑器(五)(基于QT与OGRE)
2010-05-18 17:17
323 查看
第一步,先把window封装起来,我新建一个MainWidget类,继承自QWidget类,类的头文件如下:
Main.cpp改为:
编译运行,结果和上次一样。
接下来申请一个自定义Slot,首先在头文件public:前加入宏
Q_OBJECT;
只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。这点很重要,不然你编译的时候会报“找不到slot”的错误。
然后在protected: 前加入:
slot同样也分private、public、protected,意义和c++一样。
CPP中加入相应执行:
把connect改成:
编译运行,这时点击按钮就会改变文字了。就这么简单。
信号也可以自定义,不过信号自定义相对来说用武之地稍微小一点,定义的方式和slot定义差不多,都得在头文件中定义,举个例子:点击按钮后文本改变,触发一个新信号,这个信号会把文字又变回来。
在头文件中加入:
再增加一个Slot用来对这个信号进行反馈。在private slots:后加入
CPP中加入执行:
注意信号是不需要加执行代码。
然后修改SetText()函数加入触发新信号的代码:
最后加入新的connect:
编译运行,结果和我们想要的一样。
注:信号和槽都是可以有参数的。
有关QT的基础知识就介绍到这里,具体控件的使用方法,请自行参考助手。
#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的基础知识就介绍到这里,具体控件的使用方法,请自行参考助手。
相关文章推荐
- 从零开始做3D地图编辑器(四)(基于QT与OGRE)
- 从零开始做3D地图编辑器(四)(基于QT与OGRE)
- 从零开始做3D地图编辑器(七)(基于QT与OGRE)
- 从零开始做3D地图编辑器(五)(基于QT与OGRE)
- 从零开始做3D地图编辑器(二)(基于QT与OGRE)
- 从零开始做3D地图编辑器(八)(基于QT与OGRE)
- 从零开始做3D地图编辑器(六)(基于QT与OGRE)
- 从零开始做3D地图编辑器(七)(基于QT与OGRE)
- 从零开始做3D地图编辑器(三)(基于QT与OGRE)
- 从零开始做3D地图编辑器(基于QT与OGRE)
- 从零开始做3D地图编辑器(八)(基于QT与OGRE)
- 从零开始做3D地图编辑器(十一)(基于QT与OGRE)
- 从零开始做3D地图编辑器(十三)(基于QT与OGRE)
- 从零开始做3D地图编辑器(九)(基于QT与OGRE)
- 从零开始做3D地图编辑器(十二)(基于QT与OGRE)
- 从零开始做3D地图编辑器(二)(基于QT与OGRE)
- 从零开始做3D地图编辑器(一)(基于QT与OGRE)
- 从零开始做3D地图编辑器(六)(基于QT与OGRE)
- 从零开始做3D地图编辑器(基于QT与OGRE)
- 从零开始做3D地图编辑器(一)(基于QT与OGRE)