zoukankan      html  css  js  c++  java
  • Qt C++控件提升,微件之间定义传递信号和槽案例

    Widget  ----微件,Android编程里面常见的控件组织形式

    • 新建一项目,步骤如下:

     

    • 在ui设计界面中添加了一个Widget控件:图片中选中处

     

    • 自定义一个微件,这里我命名为smallwidget,在构造函数实现中,定义一个旋转数码盒(Qt中的spinbox),一个滑动条。
    #include "smallwidget.h"
    #include <QSpinBox>
    #include <QSlider>
    #include <QHBoxLayout>
    smallwidget::smallwidget(QWidget *parent) : QWidget(parent)
    {
        QSpinBox *qs = new QSpinBox(this);//定义一个spinbox
        QSlider *qsld = new QSlider(Qt::Horizontal
    ,this);//定义一个滑动条
        QHBoxLayout *qhlayout = new QHBoxLayout(this);//定义一个横向的容器
        qhlayout->addWidget(qs);//往容器中添加定义好的spinbox
        qhlayout->addWidget(qsld);//往容器中添加定义好的滑动条
        connect(qs,static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),qsld,&QSlider::setValue);//注解一
        connect(qsld,&QSlider::valueChanged,qs,&QSpinBox::setValue);//注解2
    }
    实现效果:
    spinbox中的数码发生改变,滑动条也随之滑动(增加右移,减少左移)
    • 注解一

    为实现滑动条随同spinbox的值一同改变,我们通过帮助手册发现(光标放在类名处点击F1),Spinbox的信号valueChanged有重载

     显然,为了使用第一个,我们要用到类型转换,把spinbox信号强转为,参数使用整型的那个(函数指针),于是有了

    connect(qs,static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),qsld,&QSlider::setValue);
    • 注解二
    这一条主要是实现,spinbox的值随这滚动条的变化而改变
    •  控件(微件)提升--promoted Widget
    选中文章开头提到的微件,鼠标选中处,右键点击微件(也有可能是控件)提升(promoted Widget)

     由于我们自定义的微件是smallwidget,所以要把类名添加到 Promoted class name处,勾选全局包含(Global include),点击添加

    如此一来,窗体上一个普通的Widget,就提升成为你的smallwidget(里面包含了spinbox和滚动条,而且还能相互通信)

    运行结果:拖动滚动条,spinbox值发生改变;插图为 “飞行烟囱”苏联su-9高空高速截击机

  • 相关阅读:
    使用WCF建立起Silverlight客户端与服务端的桥梁
    Silverlight WCF RIA服务(三十三)身份验证、角色、个性化 4
    陶哲轩实分析习题 12.1.3
    Asymptote 学习记录(6) 练习用模块roundedpath画出一个图
    使用Asymptote的循环功能画出绿叶阵
    使用Asymptote的循环功能画出绿叶阵
    度量空间的一个例子:离散度量空间
    练习: 使用Asymptote 画出字母R的轮廓曲线
    练习: 使用Asymptote 画出字母R的轮廓曲线
    陶哲轩实分析命题 11.10.7
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/12264575.html
Copyright © 2011-2022 走看看