- 搭建 Qt 窗口界面的时候,在一个项目中很多窗口,或者是窗口中的某个模块会被经常性的重复使用。一般遇到这种情况我们都会将这个窗口或者模块拿出来做成一个【独立的窗口类】,以备以后重复使用。
提升为
- 先放入一个QWidget 控件
例如:我们从 QWidget 派生出一个类 SmallWidget,实现了一个自定窗口,那么这个 SmallWidget 可以作为独立的窗口显示,也可以作为一个控件来使用:打开 Qt 的.ui 文件,因为 SmallWidget 是派生自 Qwidget 类,所以需要在 ui 文件中先放入一个 QWidget 控件, 然后再上边鼠标右键
添加要提升的类的名字,然后选择 添加
添加之后,类名会显示到上边的列表框中,然后单击提升按钮,完成操作.我们可以看到, 这个窗口对应的类从原来的 QWidget 变成了 SmallWidget
我们可以看到, 这个窗口对应的类从原来的 QWidget 变成了 SmallWidget
实例
- 定义一个自定义控件
Qt设计师界面类 类名为【mywidget】 - 给自定义ui添加常用控件
- 在其他ui文件中使用 自定义控件【mywidget】
【重点】 拖放一个widget控件,将其提升为类名称是自定义控件类【mywidget】
这样就产生了联系
mywidget.h
- 提供函数接口
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
//提供设置slider的value接口
void mySetvalue(int value);
//提供获取slider的value接口
int myGetvalue();
private:
Ui::MyWidget *ui;
};
#endif // MYWIDGET_H
mywidget.cpp
- 实现spinbox和slider联动
- 实现接口函数
#include "mywidget.h"
#include "ui_mywidget.h"
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);//【此ui非彼ui】
// connect(ui->spinBox,&QSpinBox::valueChanged,[=](int i){
// ui->horizontalSlider->setValue(i);
// });
//
void (QSpinBox::*p)(int)=&QSpinBox::valueChanged;//函数名就是入口地址吧,为什么还要取地址
connect(ui->spinBox,p,
ui->horizontalSlider,&QSlider::setValue);
connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,
&QSpinBox::setValue);
}
MyWidget::~MyWidget()
{
delete ui;
}
void MyWidget::mySetvalue(int value)
{
ui->horizontalSlider->setValue(value);
}
int MyWidget::myGetvalue()
{
return ui->horizontalSlider->value();
}
mainwindow.cpp
- 调用接口函数
- ui中的widget
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//单机设置一半
connect(ui->pushButton_2,&QPushButton::clicked,[=](){
ui->widget->mySetvalue(50);//widget为控件名
});
connect(ui->pushButton,&QPushButton::clicked,[=](){
qDebug()<<ui->widget->myGetvalue()<<endl;
});
}
MainWindow::~MainWindow()
{
delete ui;
}