栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

QT从入门到实战x篇

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QT从入门到实战x篇

前面几篇我们介绍了Qt自带的控件,本篇将会介绍如何自定义组合控件并创建接口为其他控件所使用的。

在进行实际开发中,Qt自带的控件无法满足开发需求时,就需要通过对Qt控件进行封装实现自定义控件。

1. 首先创建名为“01_SmallWidget”的widget程序


2. 手动新增一个.ui文件



最终生成的文件结构如下,既增加了.ui文件,又增加了对应的.cpp和.h文件

3. 在smallwidget.ui中封装spinbox和Horizontal Slider的组合控件
整体水平布局后调整整体大小,后期使用时控件大小即为这么大小


4. 在widget.ui中调用smallwidget中封装的自定义的组合控件

(1)查看smallwidget.ui的类型为widget

在widget.ui中放一个widget的容器用于显示smallwidget内容

(2)为了保证“提升”中填写的类名正确,可以在对应的.h文件中进行复制

(3)勾选“全局包含”

(4)点击“添加”之后,smallWidget显示还未被使用,且widget的类仍为QWidget

(5)点击“提升”,widget控件变为smallWidget

运行后得到的如下:组合控件被载入

(6)上面提到的勾选“全局包含”是为了在后期再需要提升为smallWidget,不需要上面过程,工具自动帮助添加“提升为”选项


5. spinbox和Horizontal Slider的2个控件进行关联
(1)在smallWidget类中进行关联
由于 QSpinBox的 signal函数 valueChanged 存在两个函数重载,需要函数指针指明具体指向哪个信号

    //SpinBox移动,Qslider跟着移动
    void (QSpinBox::*spSignal)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,spSignal,ui->horizontalSlider,&QSlider::setValue);

运行结果:QSpinBox控件数字变化,对应的QSlider控件也发生改变

(2)实现Qslider滑动,SpinBox数据跟着改变

    //Qslider滑动,SpinBox数据跟着改变
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);

6. 在外部控件中使用自定义控件
(1)在smallWidget中增加外部控制接口
有如下需要,当界面中的两个按钮点击后,分别实现 “获取当前值”和 “设置到一半”功能


(2)创建接口函数

  • smallWidget.h中
#ifndef SMALLWIDGET_H
#define SMALLWIDGET_H

#include 

namespace Ui {
class smallWidget;
}

class smallWidget : public QWidget
{
    Q_OBJECT

public:
    explicit smallWidget(QWidget *parent = 0);
    ~smallWidget();

    //设置数字
    void setNum(int num);
    //获取数字
    int getNum();

private:
    Ui::smallWidget *ui;
};

#endif // SMALLWIDGET_H
  • smallWidget.cpp中
#include "smallwidget.h"
#include "ui_smallwidget.h"

smallWidget::smallWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::smallWidget)
{
    ui->setupUi(this);

    //SpinBox移动,Qslider跟着移动
    void (QSpinBox::*spSignal)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,spSignal,ui->horizontalSlider,&QSlider::setValue);

    //Qslider滑动,SpinBox数据跟着改变
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
}

smallWidget::~smallWidget()
{
    delete ui;
}

void smallWidget::setNum(int num)
{
    ui->spinBox->setValue(num);
}

int smallWidget::getNum()
{
    return ui->spinBox->value();
}

(3)关联到自己的Widget.cpp文档中

  • 点击获取,获取控件当前值

  • 点击设置,设置控件当前值
    //点击设置,设置控件当前值
    connect(ui->btn_set,&QPushButton::clicked,[=](){
    ui->widget->setNum(50);
    });

  • widget.cpp中
#include "widget.h"
#include "ui_widget.h"
#include 

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //点击获取,获取控件当前值
    connect(ui->btn_get,&QPushButton::clicked,[=](){
       qDebug()<widget->getNum();
    });

    //点击设置,设置控件当前值
    connect(ui->btn_set,&QPushButton::clicked,[=](){
    ui->widget->setNum(50);
    });
}

Widget::~Widget()
{
    delete ui;
}

7. 学习视频地址:QT从入门到实战x篇_21_自定义控件封装

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号