自定义控件,首先创建一个设计文件

点击添加文件,选择 Q T QT QT,选择设计师界面即可

现在这个新建的叫 F o r m 1 Form1 Form1,通过 u i ui ui界面拖拽两个控件出来

QT 自定义控件_右键

然后如果要在主窗口使用这个组件,可以直接在 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);
    }
            );