自定义控件,首先创建一个设计文件
点击添加文件,选择 Q T QT QT,选择设计师界面即可
现在这个新建的叫 F o r m 1 Form1 Form1,通过 u i ui ui界面拖拽两个控件出来
然后如果要在主窗口使用这个组件,可以直接在 w i d g e t . u i widget.ui widget.ui里拖一个 w i d g e t widget widget出来
右键"提升为",然后输入对应的类名即可
下面来实现功能,就是 Q S p i n B o x QSpinBox QSpinBox改变时, Q S l i d e r QSlider QSlider随着移动
理论上来讲这么些就行了
connect(ui->spinBox,&QSpinBox::valueChanged,ui->horizontalSlider,&QSlider::setValue);
但是我们需要的 v a l u e C h a n g e d valueChanged valueChanged是带 i n t int int参数的,还有带 Q S t r i n g QString QString参数的重载
所以需要函数指针
void(QSpinBox::*one)(int)=&QSpinBox::valueChanged;
connect(ui->spinBox,one,ui->horizontalSlider,&QSlider::setValue);
同理设置当 Q S l i d e r QSlider QSlider改变时 Q S p i n B o x QSpinBox QSpinBox的变化
connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
然后再实现两个功能,一个是 i n t g e t n u m ( ) int\ getnum() int getnum(),返回当前 Q S p i n B o x QSpinBox QSpinBox的值
一个是 v o i d s e t n u m ( i n t ) void\ setnum(int) void setnum(int),设置 Q S p i n B o x QSpinBox QSpinBox为某个值
那我们就直接去 F o r m 1 Form1 Form1里写接口即可
在 F o r m 1. h Form1.h Form1.h中
public:
explicit Form1(QWidget *parent = nullptr);
~Form1();
int getnum();
void setnum(int);
在 F o r m 1. c p p Form1.cpp Form1.cpp中实现功能
void Form1::setnum(int x)
{
ui->spinBox->setValue(x);
}
int Form1::getnum()
{
return ui->spinBox->value();
}
在 W i d g e t . c p p Widget.cpp Widget.cpp中使用这两个接口,因为 u i ui ui界面装组件的容器 W i d g e t Widget Widget提升为 F o r m 1 Form1 Form1了,可以直接使用接口
分别给两个按钮绑定上功能即可
connect(ui->btn_get,&QPushButton::clicked, [=]()
{
qDebug() << ui->widget->getnum();
}
);
connect(ui->btn_set,&QPushButton::clicked,[=]()
{
ui->widget->setnum(50);
}
);