QT 自定义组件 界面跳转

一、引用组件需要的类(头文件)

1、按钮类

QPushButton: 普通按钮;
QToolButton: 工具按钮;
QRadioButton: 单选按钮;
QCheckBox: 复选按钮;
QCommandLinkButton: 命令连接按钮;

2、布局类

QHBoxLayout水平

QVBoxLayout垂直

QGridLayout网格

QFormLayout表单

QSrackedLayout.堆栈

3、输出类

QLabel: 标签;
    ob->setAlignment(QT::AlignCenter); //文本居中对齐
    obj->setPixmap(QPixmap("文件名"));  //设置标签图片
    obj->setScaledContents(true);  //自动缩放显示图片
    QMovie *ob = new QMovie("文件名");
    obj->setMove(ob); //设置标签动画
    ob->start();    //开始播放

QTextBrowser: 文本浏览器;
QCalendarWidget: 日历窗口;

QLCDNumber: 七段数码管;
    lcd->setDigitCount(n);   //设置显示位数
    lcd->display(n);  //显示数字n

ProgressBar: 进度条;
    pb->setValue(n);  //显示进度n
    QTimer *t = new QTimer;
    connect(t, SIGNAL(timeout()), this, SLOT(updata_value()));
    t->start(n);//每过n毫秒修改updata_value中的对象值

4、输入类

QComboBox: 组合框;
    cmb->addItem("text");   //添加下拉选项

QFontComBox: 字体下拉框;
QTextEdit: 文本编辑框;

QLineEdit: 行编辑框;
    setPlaceholderText("text");   //编辑框内的提示信息

QSpinBox: 自旋框;
QTimeEdit: 调整时间;
QDial: 旋钮;

QScrollBar: 滚动条;
    setOrientation(Qt::Horizontal);  //水平显示,默认垂直

QSlider: 滑动杆;
    setRange(x, y);  //设置范围
    setMaximum(m);   //设置最大值
    setSingleStep(m);  //设置单步步长

5、容器

QGroupBox: 分组框;
    g->setLayout(vbox);   //将布局好的ui加入groupbox中
    vbox->setwidget(g);   //最终的布局使用setWidget装入groupbox窗口

QWidget: 分组(无边框);

QScrollArea: 滚动窗口容器;
    setWidget(lb);        //将lb放入容器

QToolBox: 工具栏;

QTabWidget: 制表容器;
    setTabsClosable(true);//设置标签可关闭

QStackedWidget: 栈容器;

 二、使用组件对应的类 实例化对象(头文件)

#ifndef WIDGET_H
#define WIDGET_H//引用需要的类
#include <QWidget>
#include <QWidget>
#include <QDebug>
#include <QIcon>//图标类
#include <QPushButton>//按钮类
#include <QLabel>//标签类
#include <QMovie>//动画类
#include <QLineEdit>//行编辑器
#include <QMessageBox>//对话框QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;//声明对象(组件)//按键QPushButton *btn1;QPushButton *btn2;//标签QLabel *lab1;QLabel *lab2;QLabel *lab3;//抬头//行编辑器QLineEdit *edit1;QLineEdit *edit2;};
#endif // WIDGET_H

 三、设置组件属性(原文件)

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//将自己的类绑定到Ui//1、设置窗口this->setFixedSize(499,375);//固定尺寸this->setWindowTitle("登录");//设置抬头名称this->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));//设置窗口图标//图片路径//2、为对象(组件)申请空间//按键btn1 = new QPushButton("登录",this);btn2 = new QPushButton("取消",this);//标签lab1 = new QLabel("账号",this);lab2 = new QLabel("密码",this);lab3 = new QLabel(this);//抬头//行编辑器edit1 = new QLineEdit(this);edit2= new QLineEdit(this);//3、对象属性编辑//尺寸btn1->resize(80,40);btn2->resize(80,40);edit1->resize(265,20);edit2->resize(265,20);lab1->resize(50,20);lab2->resize(50,20);lab3->resize(534,375/2);qDebug()<<lab1->width()<<lab1->height();//坐标btn1->move(113,285);btn2->move(534-133-100,btn1->y());lab1->move(btn1->x()-btn1->width()+32,btn1->y()-60);lab2->move(btn1->x()-btn1->width()+32,btn1->y()-30);edit1->move(lab1->x()+lab1->width(),lab1->y());edit2->move(lab2->x()+lab2->width(),lab2->y());//样式QMovie *lab3_movie = new QMovie(":/tabel/misak.gif");lab3_movie->start();lab3->setMovie(lab3_movie);//邦定//lab3->setScaledContents(true);//自适应尺寸//功能属性edit2->setEchoMode(QLineEdit::Password);edit2->setPlaceholderText("密码");//4、绑定信号与槽connect(btn1,&QPushButton::clicked,this,&Widget::Widget_btn1_slot);connect(btn2,&QPushButton::clicked,this,&Widget::Widget_btn2_slot);//在哪都可以,只要在使用前绑定就可以了//由于只需要绑定一次,为了方便和避免重复调用,会放在构造函数中//如果需要重复的解除绑定、重新绑定,则根据具体逻辑选择位置
}//槽函数定义
void Widget::Widget_btn1_slot()
{QLabel *lab4 = new QLabel;QLabel *lab5 = new QLabel;if(edit1->text() == 0){//QLabel *lab4 = new QLabel;lab4->setWindowTitle("账号为空");lab4->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));QMovie *lab4_movie = new QMovie(":/tabel/spase.webp");//动图路径lab4_movie->start();lab4->setMovie(lab4_movie);//绑定lab4->setScaledContents(true);//自适应尺寸lab4->show();}else if(edit1->text() == edit2->text()){qDebug()<<"login_success";emit jump_signals();//信号会发送给所有对象,但只有和该信号绑定的对象才会响应this->close();}else{qDebug()<<"false";//QLabel *lab5 = new QLabel;lab5->setWindowTitle("账号密码不正确");lab5->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));QMovie *lab5_movie = new QMovie(":/tabel/error.webp");lab5_movie->start();lab5->setMovie(lab5_movie);//绑定lab5->setScaledContents(true);//自适应尺寸lab5->show();edit2->clear();}
}void Widget::Widget_btn2_slot()
{QMessageBox box(QMessageBox::Information,"退出","确定退出吗?",QMessageBox::Ok | QMessageBox::No,this);box.setButtonText(QMessageBox::Ok,"确定");box.setButtonText(QMessageBox::No,"取消");int res = box.exec();if(res == QMessageBox::Ok){close();}
}

四、信号与槽 的设置(界面跳转开始设置)

1、头文件中声明 信号与槽

#ifndef WIDGET_H
#define WIDGET_H//引用需要的类
#include <QWidget>
#include <QWidget>
#include <QDebug>
#include <QIcon>//图标类
#include <QPushButton>//按钮类
#include <QLabel>//标签类
#include <QMovie>//动画类
#include <QLineEdit>//行编辑器
#include <QMessageBox>//对话框QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;//声明对象(组件)//按键QPushButton *btn1;QPushButton *btn2;//标签QLabel *lab1;QLabel *lab2;QLabel *lab3;//抬头//行编辑器QLineEdit *edit1;QLineEdit *edit2;public slots:void Widget_btn1_slot();//槽函数声明void Widget_btn2_slot();signals:void jump_signals();//跳转信号声明
};
#endif // WIDGET_H

2、原文件中定义 槽函数

//槽函数定义
void Widget::Widget_btn1_slot()
{QLabel *lab4 = new QLabel;QLabel *lab5 = new QLabel;if(edit1->text() == 0){//QLabel *lab4 = new QLabel;lab4->setWindowTitle("账号为空");lab4->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));QMovie *lab4_movie = new QMovie(":/tabel/spase.webp");lab4_movie->start();lab4->setMovie(lab4_movie);//绑定lab4->setScaledContents(true);//自适应尺寸lab4->show();}else if(edit1->text() == edit2->text())       //发送事件{qDebug()<<"login_success";//发送跳转信号emit jump_signals();//信号会发送给所有对象,但只有和该信号绑定的对象才会响应this->close();}else{qDebug()<<"false";//QLabel *lab5 = new QLabel;lab5->setWindowTitle("账号密码不正确");lab5->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));QMovie *lab5_movie = new QMovie(":/tabel/error.webp");lab5_movie->start();lab5->setMovie(lab5_movie);//绑定lab5->setScaledContents(true);//自适应尺寸lab5->show();edit2->clear();}
}void Widget::Widget_btn2_slot()
{QMessageBox box(QMessageBox::Information,"退出","确定退出吗?",QMessageBox::Ok | QMessageBox::No,this);box.setButtonText(QMessageBox::Ok,"确定");box.setButtonText(QMessageBox::No,"取消");int res = box.exec();if(res == QMessageBox::Ok){close();}
}

3、绑定对应的信号与槽

    //4、绑定信号与槽connect(btn1,&QPushButton::clicked,this,&Widget::Widget_btn1_slot);connect(btn2,&QPushButton::clicked,this,&Widget::Widget_btn2_slot);//在哪都可以,只要在使用前绑定就可以了//由于只需要绑定一次,为了方便和避免重复调用,会放在构造函数中//如果需要重复的解除绑定、重新绑定,则根据具体逻辑选择位置

五、跳转目标界面设置

1、头文件

#ifndef LOG_SUCCESS_H
#define LOG_SUCCESS_H#include <QWidget>
#include <QLabel>//标签类
#include <QMovie>//动画类
#include <QIcon>//图标类namespace Ui {
class log_success;
}class log_success : public QWidget
{Q_OBJECTpublic:explicit log_success(QWidget *parent = nullptr);~log_success();private:Ui::log_success *ui;QLabel *lab4;QMovie *lab4_movie;public slots:void jump_slot();};#endif // LOG_SUCCESS_H

2、原文件

#include "log_success.h"
#include "ui_log_success.h"log_success::log_success(QWidget *parent) :QWidget(parent),ui(new Ui::log_success)
{ui->setupUi(this);//界面写在构造函数内的话 启动就会调用//    未将组件绑定到ui 需要单独调用lab4 = new QLabel;
//    lab4 = new QLabel(this);//绑定到uilab4->setWindowTitle("登录成功");lab4->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));lab4_movie = new QMovie(":/tabel/misak_mikoto.gif");lab4_movie->start();lab4->setMovie(lab4_movie);//绑定lab4->setScaledContents(true);//自适应尺寸}log_success::~log_success()
{delete ui;
}//跳转响应槽函数
void log_success::jump_slot()
{//单独调用log_success::lab4->show();//调用整个ui -> form//show();
}

六、绑定跳转信号和跳转响应槽函数(主函数)

#include "widget.h"
#include "log_success.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();log_success l;QObject::connect(&w, &Widget::jump_signals, &l, &log_success::jump_slot);return a.exec();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存储芯片行业的封装类型

存储芯片行业的封装类型 存储芯片分类&#xff1a; 随机存储器&#xff08;RAM&#xff09;&#xff1a;这是易失性存储器&#xff0c;断电后存储的数据会丢失。它包括&#xff1a; 动态随机存储器&#xff08;DRAM&#xff09;&#xff1a;这是最常见的系统内存类型&#xf…

智能头盔语音识别声控芯片,AI离线语音识别ic方案,NRK3301

头盔是交通事故中保护电动车车主安全的最后一道屏障。为了增加骑行用户的安全保护&#xff0c;改善骑行用户的出行体验&#xff0c;让用户从被动使用头盔到主动佩戴头盔&#xff0c;头盔厂家与九芯电子合作&#xff0c;推出了语音智能头盔&#xff0c;它具备首家骑行专用的智能…

【网络安全】-xss跨站脚本攻击实战-xss-labs(1~10)

Level1: 检查页面源代码&#xff1a; function函数&#xff1a; (function(){try{let tn ;if(tn.includes(oem)){Object.defineProperty(document, referrer, {get: function(){return ;}});}else if(tn.includes(hao_pg)){if(!document.referrer.match(tn)){Object.definePro…

【python】python 安装和 pycharm 安装

1 python 安装 1.1 下载 下载地址&#xff1a;python 官网 1.2 安装 windows 安装为例。 双击.exe文件打开 安装界面 安装完成 1.3 检查安装是否成功 win/start 键r 键 运行窗口输入 cmd 回车 3 输入 python查看 显示版本信息&#xff0c;表示已经安装成功。 …

协议头,wireshark,http

目录 协议头 ip头 udp头 mac层 网络工具 telnet wireshark Http 一、HTTP 协议介绍 二、HTTP 协议的工作过程 三、使用抓包工具抓取报文 四、获取到http请求报文&#xff1a; 五、http请求&#xff08;request&#xff09; &#xff08;一&#xff09;、认识URL 项…

如果 Android 手机出现数据丢失,如何在Android上恢复丢失的数据

当您的 Android 手机发生数据丢失时&#xff0c;您可能需要检索丢失的文件。为了帮助您完成此过程&#xff0c;以下是执行 Android 数据恢复的一些有效方法&#xff1a; 如何在Android上检索数据 如果您的 Android 手机出现数据丢失&#xff0c;您可能需要检索丢失的文件。为了…

OpenWRT有三个地方设置DNS,究竟设置哪个地方会更好?

前言 刚上手OpenWRT软路由系统的小伙伴或许都会有这样的疑问&#xff1a;OpenWRT这个系统有三个地方是设置DNS的&#xff0c;究竟设置哪一个才是正确的&#xff1f; 这个还得从实际应用说起。 一般来说&#xff0c;咱们在使用路由器的时候&#xff0c;DNS都是默认运营商的DN…

前端框架大观:探索现代Web开发的基石

目录 引言 一、前端框架概述 二、主流前端框架介绍 2.1 React 2.1.1 简介 2.1.2 特点 2.1.3 代码示例 2.2 Vue.js 2.2.1 简介 2.2.2 特点 2.2.3 代码示例 2.3 Angular 2.3.1 简介 2.3.2 特点 2.3.3 代码示例 三、其他前端框架与库 四、前端框架的选择 五、结…

计算机毕业设计选题推荐-自驾游攻略管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

CentOs7 解决yum更新源报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。

CentOs7 解决yum更新源报错&#xff1a;[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。 前言问题解决方法&#xff1a; 前言 遇到这个问题大概率是镜像源的问题可以参照这篇文章的内容试一下 镜像源问题相关解决方法 根据自己的情况对症下药&#xff0c;如果还不…

LAMP环境下项目部署

目录 1、创建一台虚拟机 centos 源的配置 备份源 修改源 重新加载缓存 安装软件 2、关闭防火墙和selinux 查看防火墙状态 关闭防火墙 查看SELinux的状态 临时关闭防火墙 永久关闭SELinux&#xff1a;编辑SELinux的配置文件 配置文件的修改内容 3、检查系统中是否…

计算机毕业设计 家校互联管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

单片机-STM32 看门狗(八)

目录 一、看门狗概念 1、定义&#xff1a; 二、单片机中的看门狗 1、功能描述&#xff1a; 2、看门狗设置部分 预分频寄存器(IWDG_PR) 3、窗口看门狗 特性&#xff1a; 4、看门狗配置&#xff1a; 一、看门狗概念 看门狗--定时器&#xff08;不属于基本定时器、通用定…

svg图标的使用

图片的格式有很多&#xff0c;前端经常使用的有以下类型:jpg,jpeg,png,gif,svg,这篇文章将简单svg的情况&#xff0c;以及项目中如何使用和配置svg图标 目录 什么是svg图标 SVG图标的优缺点 优点 缺点 svg前端使用场景 SVG在代码中的使用 简单使用创建svg 作为图标引入…

udp网络通信 socket

套接字是实现进程间通信的编程。IP可以标定主机在全网的唯一性&#xff0c;端口可以标定进程在主机的唯一性&#xff0c;那么socket通过IP端口号就可以让两个在全网唯一标定的进程进行通信。 套接字有三种&#xff1a; 域间套接字&#xff1a;实现主机内部的进程通信的编程 …

yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距

可实现对图片&#xff0c;视频&#xff0c;摄像头的检测 项目概述 本项目旨在实现一个集成了YOLOv5目标检测算法、图形用户界面&#xff08;GUI&#xff09;以及单目测距功能的系统。该系统能够对图片、视频或实时摄像头输入进行目标检测&#xff0c;并估算目标的距离。通过…

Linux shell编程学习笔记78:cpio命令——文件和目录归档工具

0 前言 在Linux系统中&#xff0c;除了tar命令&#xff0c;我们还可以使用cpio命令来进行文件和目录的归档。 1 cpio命令的功能&#xff0c;帮助信息&#xff0c;格式&#xff0c;选项和参数说明 1.1 cpio命令的功能 cpio 名字来自 "copy in, copy out"&#xf…

具有RC反馈电路的正弦波振荡器(文氏桥振荡器+相移振荡器+双T振荡器)

2024-9-10&#xff0c;星期二&#xff0c;22:13&#xff0c;天气&#xff1a;雨&#xff0c;心情&#xff1a;晴。今天从下午开始淅淅沥沥一直在下雨&#xff0c;还好我有先见之明没骑自行车&#xff0c;但是我忘带伞了&#xff0c;属于说是有点脑子但是不多了&#xff0c;2333…

如何注册谷歌账号(“此电话号码无法验证”问题)

如何注册谷歌账号&#xff08;“此电话号码无法验证”问题&#xff09; 以下注册账号的步骤于 2024.9.10 20:00 成功实施。 文章目录 如何注册谷歌账号&#xff08;“此电话号码无法验证”问题&#xff09;1&#xff09;打开谷歌浏览器2&#xff09;设置浏览器语言【英语&…

elementPlus 反显el-select多选,只反显了id,没有名称

elementPlus 反显el-select多选&#xff0c;只反显了id&#xff0c;没有名称 原因 &#xff1a; el-select的v-model数组中元素和接口返回的数组中元素类型不同&#xff0c;一个是字符串一个是数字类型 解决办法 &#xff1a; 数组中字符串转换下数字&#xff0c;或者数字转…