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()函数的参数一样

作业

cpp 复制代码
#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();
    }


}
相关推荐
遇印记22 分钟前
大二java学习笔记:二维数组
java·笔记·学习
bnsarocket2 小时前
Verilog和FPGA的自学笔记6——计数器(D触发器同步+异步方案)
笔记·fpga开发·verilog·自学·硬件编程
LK_073 小时前
【Open3D】Ch.3:顶点法向量估计 | Python
开发语言·笔记·python
li星野3 小时前
打工人日报#20251011
笔记·程序人生·fpga开发·学习方法
摇滚侠3 小时前
Spring Boot 3零基础教程,yml配置文件,笔记13
spring boot·redis·笔记
QT 小鲜肉3 小时前
【个人成长笔记】在Ubuntu中的Linux系统安装 anaconda 及其相关终端命令行
linux·笔记·深度学习·学习·ubuntu·学习方法
QT 小鲜肉3 小时前
【个人成长笔记】在Ubuntu中的Linux系统安装实验室WIFI驱动安装(Driver for Linux RTL8188GU)
linux·笔记·学习·ubuntu·学习方法
急急黄豆4 小时前
MADDPG学习笔记
笔记·学习
Chloeis Syntax4 小时前
栈和队列笔记2025-10-12
java·数据结构·笔记·
QZ_orz_freedom5 小时前
学习笔记--文件上传
java·笔记·学习