菜鸟学QT之二-------------初识信号、槽、布局

来源:互联网 发布:ipad淘宝hd如何横屏 编辑:程序博客网 时间:2024/05/17 02:22

引文

转载请注明原文链接

一、改定履历

2011-08-06-----------------------------------新建文本文档2011-08-07-----------------------------------增加new失败异常处理



二、实例

先上图:

上图的两个控件相互关联,即调整任一个控件都会对另一个控件展示有影响

上代码:

#include "qthello.h"#include <QtGui/QApplication>#include <QtGui/QPushButton>#include <QtGui/QWidget>#include <QtGui/QSpinBox>#include <QtGui/QSlider>#include <QtGui/QHBoxLayout>#include <QLabel>#include <exception>#include <iostream>int main(int argc, char *argv[]){QApplication App(argc, argv);try{QWidget* pQWindow = new QWidget;pQWindow->setWindowTitle("set you own age");QSpinBox* pQSpinBox = new QSpinBox;QSlider* pQSlider = new QSlider(Qt::Horizontal);pQSpinBox->setRange(0, 130);pQSlider->setRange(0, 130);QObject::connect(pQSpinBox, SIGNAL(valueChanged(int)), pQSlider, SLOT(setValue(int)));QObject::connect(pQSlider, SIGNAL(valueChanged(int)), pQSpinBox, SLOT(setValue(int)));pQSpinBox->setValue(35);QHBoxLayout* pLayout = new QHBoxLayout;pLayout->addWidget(pQSpinBox);pLayout->addWidget(pQSlider);pQWindow->setLayout(pLayout);pQWindow->show();App.exec();delete pQSlider;delete pQSpinBox;delete pQWindow;}catch (std::bad_alloc & e){std::cerr << e.what() << std::endl;exit(-1);}}



代码中25、26行两行即为信号、槽机制的运用。而蓝色代码即为布局运用。

概念:信号、槽---QT的窗口部件通过发射信号(signal)来表明一个用户动作已经发生了或者是一个状态已经改变了。例如,当用户调整spin数值时,spin就会发射一个valueChanged信号。信号可以与函数(这里称之为“槽”slot)相连接,以便在发射信号时,槽可以接收到这个信号并得以自动执行。这个例子中,slider对象的槽setValue得到spin发射的valueChanged信号.并得以执行。connect就是将信号与槽连接起来的方法。宏SIGNAL()和SLOT()是QT语法中的一部分。

 

有同学注意到上面两个connect会不会造成两个关联对象信号发射造成死循环,这里引用一段话,说的很清楚,QT在机制上已经避免了这类问题的产生:“当spinBox发出valueChanged信号的时候,会回调slider的setValue,以更新slider的值;而slider发出valueChanged信号的时候,又会回调slider的setValue。但是,如果新的value和旧的value是一样的话,是不会发出这个信号的,因此避免了无限递归”。

 

30到33行部分:

在源程序中30到33行,使用了一个布局管理器对控件进行布局处理。布局管理器(layout  manager)就是一个能够对其所负责窗口部件的尺寸大小和位置进行设置的对象。为要有三个布局管理器类:

QHBoxLayout:在水平方向上排列窗口部件

QVBoxLayout:在竖起方向上排列窗口部件

QGridLayout:把各个窗口部件排列在一个网格中

样例程序中即依次将两个控件进行水平布局处理。将两个控件依次加入到布局管理器中,然后调用QWidget::setLayout()将在窗口上安装该布局管理器。

原创粉丝点击