当前位置: 首页 > news >正文

2.21号qt

1.QMainWindow中常用的类

继承于QMainWindow类,原因该类提供了QWidget没有提供的成员函数。

菜单栏、工具栏、状态栏、浮动窗口(铆接部件)、核心部件

1.1 菜单栏 QMenuBar

    //创建菜单栏 QMenuBar  最多只能有一个
    QMenuBar *mbar = menuBar();
    //将菜单栏放入窗口中
    this->setMenuBar(mbar);
    //往菜单栏里增加菜单
    QMenu *file = mbar->addMenu("文件");
    QMenu *edit = mbar->addMenu("编辑");
    //往菜单中增加菜单项
    file->addAction("新建");
    //增加分隔符
    file->addSeparator();
    file->addAction("打开");

1.2 工具栏 QToolBar

  //创建工具栏 QToolBar  可以有多个
    QToolBar *tbar = new QToolBar(this);
    //将工具栏放入窗口中  设置停靠区域
    this->addToolBar(Qt::LeftToolBarArea,tbar);
    //后期设置 只允许左右停靠
    tbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    //不允许浮动
    tbar->setFloatable(false);
    //往工具栏中增加工具项
    tbar->addAction("欢迎");


    //实例化一个按钮
    QPushButton *btn = new QPushButton(this);
    btn->setText("编辑");
    //将按钮放入工具栏中
    tbar->addWidget(btn);

1.3 状态栏 QStatusBar

    //创建状态栏 QStatusBar  最多只能有一个
    QStatusBar *sbar = statusBar();
    //将状态栏放入窗口中
    this->setStatusBar(sbar);


    //实例化一个标签
    QLabel *lab = new QLabel("问题",this);
    //将标签放入状态栏中
    //sbar->addWidget(lab);//默认从左边显示
    sbar->addPermanentWidget(lab); //默认从右边显示

1.4 浮动窗口 QDockWidget

   //创建浮动窗口  QDockWidget 可以有多个
    QDockWidget *dock = new QDockWidget("浮动窗口",this);
    //将浮动窗口放入界面中
    this->addDockWidget(Qt::BottomDockWidgetArea,dock);
    //后期设置 只允许左右停靠
    dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);


    //创建中心部件  最多只能有一个
    QTextEdit *text_edit = new QTextEdit(this);
    //将中心部件放入窗口中
    this->setCentralWidget(text_edit);

2.ui界面文件

1> ui界面文件是在项目工程文件的Forms文件夹下(XXX.ui)

2> ui界面上可以通过ui指针访问到ui界面上的所有组件。

3.信号与槽

qt以引为傲的核心机制:对象树、信号与槽、事件机制

1> 信号和槽是qt的核心机制之一,可以实现多个组件之间的通信。

2> 信号:信号函数。信号定义在类体的signals权限下,信号函数是一个不完整的函数,只需要声明,不需要实现。

3> 槽:槽函数。槽定义在类体的slots权限下,槽函数是一个完整的函数,既要有声明,也要有定义。该函数可以当成普通函数使用。

4> 任意一个组件都有系统提供的信号和槽。

3.1 带有信号和槽的类体定义

signals: //信号权限,该权限下函数 都是信号
    void my_signal(); //只需要声明 不需要实现
    
    
public slots: //槽函数权限  ,该权限下函数 都是槽函数
    void my_slot(); //需要声明 也要实现

3.2 信号和槽的连接方式

3.2.1

基于ui界面上的连接,在ui界面下的信号和槽区,将系统提供的信号和槽进行连接。

该连接,无需手动书写信号函数、槽函数、连接函数

3.2.2

基于ui界面上的连接,在组件上,右击转到槽,选中要发射的信号,在槽函数中处理相关逻辑代码。

该连接,无需手动书写信号函数、连接函数

3.2.3

手动连接信号和槽,基于qt4版本的连接,该连接是不友好的连接。

需要使用connect连接函数进行连接,在QObject类中

[static] QMetaObject::Connection //函数的返回值类型  静态成员函数
    QObject::connect( //函数名
        const QObject *sender, //发送者 组件的指针
        const char *signal, //发送的信号 信号的函数 应该用函数指针接收 不能用char *接收 所以需要使用宏函数转换
        const QObject *receiver, //接受者 组件的指针
        const char *method, // 槽函数 应该用函数指针接收 不能用char *接收 所以需要使用宏函数转换
        )

信号宏函数 SIGNAL()
槽宏函数 SLOT()

3.2.4

手动连接信号和槽,基于qt5版本的连接,该连接就是友好的连接

需要使用connect连接函数进行连接,在QObject类中

[static] QMetaObject::Connection //函数返回值类  静态函数
    QObject::connect( //函数名
        const QObject *sender, //信号的发送者  组件的指针
        PointerToMemberFunction signal, //信号函数  可以直接传函数名 原因是函数指针接收
        const QObject *receiver, //信号的接收者  组件的指针
        PointerToMemberFunction method, //槽函数 可以直接传函数名 原因是函数指针接收
        )

3.2.5

手动连接信号和功能函数,如果信号一旦被触发,则自动执行功能函数中的内容。

功能函数:全局函数、lambda表达式

[static] QMetaObject::Connection 
    QObject::connect(
        const QObject *sender, 
        PointerToMemberFunction signal, 
        Functor functor//功能函数
        )

3.3 自定义的信号

自定义的信号,定义在signals权限下,是一个不完整的函数,只要声明,不要实现。

自定义 的信号,需要手动触发,使用emit关键字进行发射信号,如果自定义的信号一旦被发射,则会自动执行对应的槽函数处理

3.4 断开连接

disconnect()和connect()函数的参数一样

作业

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->btn1,SIGNAL(clicked()),this,SLOT(close()));connect(ui->logbtn,&QPushButton::clicked,this,&Widget::my_slot1);}Widget::~Widget()
{delete ui;
}void  Widget::my_slot1()
{QString uname;QString pword;uname=ui->ed1->text();pword=ui->ed2->text();if(uname=="admin" && pword=="123456"){qDebug() << "登录成功" ;this->close();}else{qDebug() << "登录失败";ui->ed2->clear();}}

http://www.lryc.cn/news/304690.html

相关文章:

  • 什么是MVVM?MVC、MVP与MVVM模式的区别?
  • ElementUI组件的安装和使用
  • Laravel01 课程介绍以及Laravel环境搭建
  • 面试redis篇-03缓存击穿
  • k8s容器以及基础设施优化
  • 蓝桥杯备赛系列——倒计时50天!
  • jenkins配置ssh的时候测试连接出现Algorithm negotiation fail
  • 思维模型整合
  • 代理模式笔记
  • 手机中有哪些逆向进化的功能
  • LeetCode24.两两交换链表中的节点
  • Eureka注册中心(黑马学习笔记)
  • unity-firebase-Analytics分析库对接后数据不显示原因,及最终解决方法
  • JWT(JSON Web Token)原理、应用与安全性分析
  • Redis 缓存(Cache)
  • ChatGPT回答模式
  • 戏曲文化苑|戏曲文化苑小程序|基于微信小程序的戏曲文化苑系统设计与实现(源码+数据库+文档)
  • Mysql数据库主从集群从库Slave因为RelayLog过多过大引起服务器硬盘爆满生产事故实战解决
  • QT基本组件
  • uniapp实现全局悬浮框
  • C语言特殊函数
  • 全栈开发(TS,React,Vue, Java, 移动端flutter)接单
  • vue3使用百度地图
  • docker 安装达梦dm8 包含lincese
  • golang入门介绍-1
  • 273.【华为OD机试真题】园区参观路径(动态规划-JavaPythonC++JS实现)
  • ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)
  • 超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)
  • 流程图:理解、创建与优化的视觉工具
  • Java EE面试题解析(下)