菜鸟学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()将在窗口上安装该布局管理器。
- 菜鸟学QT之二-------------初识信号、槽、布局
- qt学习笔记(二)之布局管理器&信号与槽(简介)
- qt学习笔记(二)之布局管理器&信号与槽(简介)
- [QT起航] 第二篇——(一)初识Qt(第一个Qt程序、信号与槽、布局)
- QT初识(1) 信号与槽
- QT初识(2) 信号与槽
- Qt 之 信号槽
- Qt编程之自定义信号与槽(二)
- 和菜鸟一起学linux总线驱动之初识USB
- 菜鸟学QT之三-------------QT学习资源
- 零基础学Qt4编程之Qt核心机制与原理之信号与槽
- theoretical-零基础学Qt4编程之Qt核心机制与原理之信号与槽-
- 零基础学Qt4编程之Qt核心机制与原理之信号与槽
- Qt之信号与槽
- QT之信号和槽
- Qt之信号与槽
- Qt之TableWidget、信号、槽
- Qt之信号槽机制
- 什么是HAL 硬件抽象层
- 过凸多边形重心的任意直线能将图形面积等分?
- Robot畅想曲
- 关于引用&的讨论
- 使用directx11实现高质量图形效果@CGDC4
- 菜鸟学QT之二-------------初识信号、槽、布局
- hdu acmsteps 1.3.6
- 删除sql server注册服务器
- SPAN 和 DIV 的区别
- JDBC数据库的增、删、改语句
- 如何在一个已排序的NSArray中搜索某一特定字符串?答案是使用CFArray自带的搜索功能
- 如何在VLC中支持IPv6 RTSP流媒体播放
- iPhone开发面试题--葵花宝典
- 大整数类C++实现——完整代码