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高空高速截击机

原文地址:https://www.cnblogs.com/saintdingspage/p/12264575.html