标签:自定义控件 val idg 布局 容器 基类 div parent 右键
动手实现自定义控件:
1、首先在ui界面中添加一个(Widget)容器类。如图中的1所示
2、在项目中添加一个SmallWidget类,如下:
3、接着在程序编辑界面进行程序编辑如下:
#include "smallwidget.h" /*自定义控件*/ #include <QSpinBox> #include <QSlider> #include <QHBoxLayout> SmallWidget::SmallWidget(QWidget *parent) : QWidget(parent) { QSpinBox *spin = new QSpinBox(this); QSlider *slider = new QSlider(Qt::Horizontal,this); /*将文件添加到布局中*/ QHBoxLayout *layOut = new QHBoxLayout(this); layOut->addWidget(spin); layOut->addWidget(slider); /* * 实现两个控件相互关联 * 首先确定信号的发送者与接受者。 * 查看信号所在的类QSpinBox的帮助文档,查看Signals, * 不难看出valueChanged为重载函数, * 即:经过查询&QSpinBox::valueChanged中的valueChanged为 * 重载函数,为了不产生二义性,并进行类型转换,这里使用如下前缀代码: * static_cast< void (QSpinBox::*) ( int )> * 关键字 返回值类型 作用域指针类型 参数 * 查看slider的槽函数,其不是重载函数,很容易将其写出&QSlider::setValue */ connect(spin,static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),slider,&QSlider::setValue); //同理可以将 slider 关联到 spin connect(slider,&QSlider::valueChanged,spin,&QSpinBox::setValue); }
4、将代码完成以后,就可以将ui界面中的控件进行提升,右键单击Widget容器类。选择提升为,即可出现类似如下的界面(这个界面是我对其他控件进行提升的界面):
第一步:在图中1处添加类名,这里为了防止错误,做好从程序编辑界面处复制过来,复制的内容就是之前添加的类的名字
第二步:在图中2处勾选,勾选的目的意义是当对控件进行提升时,右键单击控件会有两个提升为,其中一个提升为能够快速的进行提升,而不需要再填写这些内容,
第三步:如图中3处点击添加。
第四步:如图中4处点击提升。
第五步:观察现象, widget_5 的基类从 QWidget 变成了 SmallWidget
到此,就完成了自定义控件的制作过程,可以点击运行,看看结果了。如下图:
当改变spin里面的值时,slider的滑动块就会滑至对应的位置。
当将slider的滑块滑至莫处时,spin里面就会相对应的显示对应的数字。
大功告成!!!!!!
标签:自定义控件 val idg 布局 容器 基类 div parent 右键
原文地址:https://www.cnblogs.com/doker/p/11041928.html