目录
在设计过程中需要许多控件之间相互关联又封装明确,就可以进行自定义控件类型
下面以 计数器 和 滚动条 相关联的控件 为例
1.创建新的设计类(ui类)
2. 创建所需控件
在自己的设计类中放入相应的控件
3. 添加所需控件窗口
根据自己所创建设计类 的父类 来选择一个相同 基类窗口
在默认ui类中添加
在默认ui界面添加的widget窗口,其基类型QWidget
4. 提升所需控件窗口
由于类型还是QWidget,是空窗口
所以需要将该窗口的类型 提升为 所需控件的类型
输入自己创建的ui类名称,选中全局包含可方便下次直接提升
提升之后类型改变
运行结果,该窗口就默认存在两个已经添加好的控件
5. 将控件之间进行连接
通过信号和槽的链接来将两个控件关联起来
5.1 修改Spin Box 右侧的滚动条 跟着动
由于QSpinBox的信号存在重载,所以直接放入作为信号就会指向不明确,所以需要函数指针
//修改Spin Box 右侧的滚动条 跟着动
//存在重载函数需要有函数指针
void(QSpinBox:: *my_spinBox)(int) = &QSpinBox::valueChanged;
connect(ui->spinBox,my_spinBox,this,[=](int val){
ui->horizontalSlider->setValue(val);
});
5.2 拖动滚动条 左侧的SpinBox 跟着动
//修改滚动条 左侧的Spin Box 跟着动
connect(ui->horizontalSlider,&QSlider::valueChanged,this,[=](int val){
ui->spinBox->setValue(val);
});
Slisder的valueChanged没有重载,可以直接作为信号,返回值为int
5.3 运行结果
5.4 设置外部按钮,来控制自定义控件
1.在父类窗口中添加两个按钮
在父类自定义ui中设置两个函数来 获取当前窗口的值 和 设置当前窗口空间的值
void smallwidget::setVal(int val)
{
ui->spinBox->setValue(val);
}
int smallwidget::getVal()
{
return ui->spinBox->value();
}
在父类cpp文件中链接两个按钮与自定义控件的关系
//点击设置按钮,将自定义控件设置到一半位置
connect(ui->pb_set,&QPushButton::clicked,this,[=](){
ui->widget->setVal(50);
});
//点击获取按钮,获取自定义控件当前的值
connect(ui->pb_get,&QPushButton::clicked,this,[=](){
qDebug() << ui->widget->getVal();
});
运行结果