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
时间: 2024-10-11 23:09:45