这个例子显示了创建几个窗口部件并用信号和槽把它们连接起来,和如何处理重新定义大小事件。

    #include <qapplication.h>
#include <qpushbutton.h>
#include <qslider.h>
#include <qlcdnumber.h>
#include <qfont.h> #include <qvbox.h>

这里显示的是三个新的被包含的头文件。qslider.h和qlcdnumber.h在这里是因为我们使用了两个新的窗口部件,QSlider和QLCDNumber。qvbox.h在这里是因为我们使用了Qt的自动布局支持。

    class MyWidget : public QVBox
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
}; MyWidget::MyWidget( QWidget *parent, const char *name )
: QVBox( parent, name )
{

MyWidget现在继承了QVBox,而不是QWidget。我们通过这种方式来使用QVBox的布局(它可以把它的子窗口部件垂直地放在自己里面)。重新定义大小自动地被QVBox处理,因此现在也就被MyWidget处理了。

QLCDNumber *lcd  = new QLCDNumber( 2, this, "lcd" );
lcd是一个QLCDNumber,一个可以按像LCD的方式显示数字的窗口部件。这个实例被设置为显示两个数字,并且是this的子窗口部件。它被命名为“lcd”。

        QSlider * slider = new QSlider( Horizontal, this, "slider" );
slider->setRange( 0, 99 );
slider->setValue( 0 );

QSlider是一个经典的滑块,用户可以通过在拖动一个东西在一定范围内调节一个整数数值的方式来使用这个窗口部件。这里我们创建了一个水平的滑块,设置它的范围是0~99(包括0和99,参见QSlider::setRange()文档)并且它的初始值是0。

connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
这里我们是用了信号/槽机制把滑块的valueChanged()信号和LCD数字的display()槽连接起来了。

无论什么时候滑块的值发生了变化,它都会通过发射valueChanged()信号来广播这个新的值。因为这个信号已经和LCD数字的display()槽连接起来了,当信号被广播的时候,这个槽就被调用了。这两个对象中的任何一个都不知道对方。这就是组件编程的本质。

槽是和普通C++成员函数的方式不同,但有着普通C++成员函数的方位规则。

#include <qapplication.h>
#include <qpushbutton.h>
#include <qslider.h>
#include <qlcdnumber.h>
#include <qfont.h> #include <qvbox.h> class MyWidget : public QVBox
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
}; MyWidget::MyWidget( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setFont( QFont( "Times", 18, QFont::Bold ) ); connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) ); QLCDNumber *lcd = new QLCDNumber( 2, this, "lcd" ); QSlider * slider = new QSlider( Horizontal, this, "slider" );
slider->setRange( 0, 99 );
slider->setValue( 0 ); connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
} int main( int argc, char **argv )
{
QApplication a( argc, argv ); MyWidget w;
a.setMainWidget( &w );
w.show();
return a.exec();
}

Qt入门(16)——组装窗口部件的更多相关文章

  1. Qt学习之自定义窗口部件

    自定义Qt窗口部件 实现一个十六进制的SpinBox,一般SpinBox只支持十进制整数,但是可以子类化方法实现该功能 需重新实现以下虚函数 virtual QString textFromValue ...

  2. 【Qt学习笔记】窗口部件整理

    关于Qt中窗口部件的学习 今天开始学习Qt的窗口部件,领略一下Qt的神奇之处,记得2012年的那年冬天,我还学Java呢,现在基本上和Java说再见了,不过对于嵌入式的开发Qt还是举足轻重的,我想趁着 ...

  3. PyQt(Python+Qt)学习随笔:窗口部件大小策略sizePolicy与SizeConstraint布局大小约束的关系

    在<PyQt(Python+Qt)学习随笔:Qt Designer中部件的三个属性sizeHint缺省尺寸.minimumSizeHint建议最小尺寸和minimumSize最小尺寸>. ...

  4. 第15.41节、PyQt(Python+Qt)入门学习:输入部件QComboBox组合框功能详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 Designer中输入工具部件中的Combo Box组合框与 ...

  5. Qt入门(19)——自定义窗口部件

    我们介绍可以画自己的第一个自定义窗口部件.我们也加入了一个有用的键盘接口.我们添加了一个槽:setRange().        void setRange( int minVal, int maxV ...

  6. Qt入门(15)——使用窗口部件

    下面是如何创建一个你自己的窗口部件,描述如何控制一个窗口部件的最小大小和最大大小,并且介绍了窗口部件的名称. class MyWidget : public QWidget { public: MyW ...

  7. [Qt Creator 快速入门] 第3章 窗口部件

    从这一章开始正式接触Qt的窗口部件.在第2章曾看到 Qt Creator 提供的默认基类只有 QMainWindow.QWidget 和 QDialog 这3种.QMainWindow 是带有菜单栏和 ...

  8. Qt入门(14)——父窗口部件和子窗口部件

    这个例子演示了如何创建一个父窗口部件和子窗口部件.我们下面使用一个单一的父窗口部件和一个独立的子窗口部件编写界面.    #include <qvbox.h>我们添加了一个头文件qvbox ...

  9. 第15.34节 PyQt(Python+Qt)入门学习:containers容器类部件QStackedWidget堆叠窗口部件详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 StackedWidget堆叠窗口部件为一系列窗口部件的堆叠,对应类为QStackedWi ...

随机推荐

  1. 在Linux下用netstat查看网络状态、端口状态

    在Linux下用netstat查看网络状态.端口状态 在linux一般使用netstat 来查看系统端口使用情况步. netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实 ...

  2. 使用WebSocket构建实时WEB

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3795075.html ...

  3. 关于mvc 分页的 这两个结合着用

    http://www.cnblogs.com/JackFeng/archive/2010/01/25/JackFeng.html http://www.webdiyer.com/mvcpager/de ...

  4. ES6数组去重

    今天五一,在出去玩之前赶紧写篇博客,时刻不要忘记学习^_^!! 提到数组去重,想必大家都不陌生,会的同学可能噼里啪啦写出好几个,下面来看看之前常见的去重代码: 'use strict'; var ar ...

  5. sql - 获取日期中的年

    使用 YEAR函数, 如 --day为rain表中的字段. select YEAR(day) from t_rain

  6. C#中区别多态、重载、重写的概念和语法结构

    C#中区别多态.重载.重写的概念和语法结构 重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual ...

  7. 用PHP实现一个高效安全的ftp服务器(二)

    接前文. 1.实现用户类CUser. 用户的存储采用文本形式,将用户数组进行json编码. 用户文件格式: * array( * 'user1' => array( * 'pass'=>' ...

  8. 06MySQL数据库入门

    1.数据库的概念 数据库是保存数据的仓库,可以方便的把数据放进去,并且把数据根据各种需求取出来. 数据库管理系统(Database Management System,DBMS)是对数据库进行管理(增 ...

  9. java基础之反射机制

    一.概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  10. const详解

    详解C++中的const关键字