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();
    }


}
相关推荐
烟锁迷城25 分钟前
软考中级 软件设计师 第一章 第十节 可靠性
笔记
胡楚昊25 分钟前
B站pwn教程笔记-1
笔记
Bunny02125 小时前
SpringMVC笔记
java·redis·笔记
贾贾202312 小时前
配电网的自动化和智能化水平介绍
运维·笔记·科技·自动化·能源·制造·智能硬件
xiaocao_102314 小时前
手机备忘录:安全存储与管理个人笔记的理想选择
笔记·安全·智能手机
索然无味io14 小时前
XML外部实体注入--漏洞利用
xml·前端·笔记·学习·web安全·网络安全·php
王磊鑫14 小时前
Java入门笔记(1)
java·开发语言·笔记
安冬的码畜日常15 小时前
【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)
笔记·vim·vim配置·vim同步练习·vim options·vim option-list
追Star仙16 小时前
基于Qt中的QAxObject实现指定表格合并数据进行word表格的合并
开发语言·笔记·qt·word
安冬的码畜日常17 小时前
【Vim Masterclass 笔记24】S10L43 + L44:同步练习10 —— 基于 Vim 缓冲区的各类基础操作练习(含点评课)
笔记·vim·自学笔记·vim同步练习·vim缓冲区·vim buffer·vim缓冲区练习