信号与槽,QMainWindow中常用类的使用

news2024/12/26 11:47:49

QMainWindow菜单栏和工具栏

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

菜单栏

    //创建菜单栏
    QMenuBar *bar = menuBar();
    //指定父组件
    this->setMenuBar(bar);
    this->resize(600,400);
    this->setFixedSize(600,400); //固定窗口大小

    //往菜单栏里添加菜单
    //往 菜单里添加菜单项
    QMenu *file1 = bar->addMenu("文件");
    QMenu *file2 = bar->addMenu("编辑");
    bar->addMenu("构建");
    bar->addMenu("调试");

    file1->addAction("新建");
    file1->addSeparator();
    file1->addAction("打开");

    file2->addAction("复制");
    file2->addSeparator();
    file2->addAction("粘贴");

工具栏

    //创建工具栏
    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);
    //将按钮放入工具栏
    tbar->addWidget(btn);

状态栏

    //创建状态栏 最多只有一个
    QStatusBar *sbar = statusBar();
    //将状态栏放入窗口
    this->setStatusBar(sbar);
    //实力化一个标签
    QLabel *lab = new QLabel("编译输出",this);
    //将标签放入状态栏
    //sabr->addWidget(lab)  默认从左边显示
    sbar->addPermanentWidget(lab);//默认从右边显示

铆接部件(浮动窗口)

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

    //创建一个中心部件 只能有一个
    QTextEdit *edit = new QTextEdit(this);
    //将文本编辑器放入窗口中
    this->setCentralWidget(edit);

中心部件

    //创建一个中心部件 只能有一个
    QTextEdit *edit = new QTextEdit(this);
    //将文本编辑器放入窗口中
    this->setCentralWidget(edit);

UI界面文件

UI界面文件在Forms文件夹下

UI界面可以通过UI指针访问到UI界面上的所有组件

资源文件的添加

确保项目兼容性,能够使得自己的代码在其他电脑能够正常运行,或者发布软件时也能正常运行。

步骤

将需要的资源放入项目中。

给项目增加一个资源文件,存放资源

编译

登陆界面升级

#include "login.h"
#include "ui_login.h"

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

    QMovie *mv = new QMovie(":/pictrue/qq2.gif");
    ui->login_label->setMovie(mv);
    mv->start();
    ui->login_label->setScaledContents(true);  //使图片自适应标签

    ui->user_label->setPixmap(QPixmap(":/pictrue/qq.png"));
    ui->user_label->setScaledContents(true);  //使图片自适应标签

    ui->password_label->setPixmap(QPixmap(":/pictrue/passwd.jpg"));
    ui->password_label->setScaledContents(true);  //使图片自适应标签
    ui->password_Edit->setEchoMode(QLineEdit::Password);

}

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

信号与槽

qt核心机制:对象树,信号与槽,事件机制

信号与槽是qt的核心机制之一,可以实现多个组件之间的连续(通信)

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

槽:槽函数,定义在类体的slots权限下的函数,槽函数是一个完整的函数,既要声明又要实现。(槽函数可以当作普通函数使用)

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

带有信号与槽的类体定义

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    
signals://表示在该权限下,都是信号函数(只能定义函数)
    void my_signal();

public slots://表示该权限下,都是槽函数(只能定义函数)
    void my_slot();

};
#endif // WIDGET_H

信号与槽的连接方式

方式一:基于UI界面上的连接,将UI界面上系统提供的信号与槽进行连接。(该链接方式不需要写信号函数,槽函数,连接函数)

方式二:基于UI界面上的连接,在组件上右击,转到槽,选中要发射的信号,在系统提供的槽函数框架中,书写逻辑代码(该链接方式不需要写信号函数,连接函数)

void Widget::on_close_clicked()
{
    qDebug() << "hello" << endl;
    static int num = 0;
    if(num%3 == 1)
    {
        ui->btn->setStyleSheet("background-color:red");
    }
    else if(num%3 == 2)
    {
        ui->btn->setStyleSheet("background-color:green");
    }
    else if(num%3 == 0)
    {
        ui->btn->setStyleSheet("background-color:blue");
    }
    num++;
}

方式三:手动连接信号和槽,基于qt4版本的连接,该链接是不友好的链接(该链接方式需要写连接函数,connect函数在QOject类中)

[static] QMetaObject::Connection //函数的返回值  静态成员函数
    QObject::connect( //函数名
        const QObject *sender, //组件的指针 信号的发送者
        const char *signal, //信号,由于信号是个函数,需要用函数指针,而不能用char *进行接受
        const QObject *receiver, 
        const char *method, 
        Qt::ConnectionType type = Qt::AutoConnection
        )

练习

将day1做的登录界面升级优化【资源文件的添加】

在登录界面的登录取消按钮进行以下设置:

使用手动连接,将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数

将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,则输出“登录成功”,并关闭该界面,如果匹配失败,则输出登录失败,并将密码框中的内容清空

头文件

#ifndef LOGIN_H
#define LOGIN_H

#include <QWidget>
#include <QMovie>
#include <QPushButton>
#include <QDebug>
#include <QString>

QT_BEGIN_NAMESPACE
namespace Ui { class login; }
QT_END_NAMESPACE

class login : public QWidget
{
    Q_OBJECT

public:
    login(QWidget *parent = nullptr);
    ~login();

public slots:
    void my_slot();
    void my_slot1();


private:
    Ui::login *ui;
    QPushButton *cancel_Button;
    QPushButton *login_Button;
};
#endif // LOGIN_H

源文件

#include "login.h"
#include "ui_login.h"

login::login(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::login)
    , cancel_Button(new QPushButton("取消",this))  //实例化cancel_Button空间
    , login_Button(new QPushButton("登录",this))  //实例化login_Button空间
{
    ui->setupUi(this);

    QMovie *mv = new QMovie(":/pictrue/qq2.gif");
    ui->login_label->setMovie(mv);
    mv->start();
    ui->login_label->setScaledContents(true);  //使图片自适应标签

    ui->user_label->setPixmap(QPixmap(":/pictrue/qq.png"));
    ui->user_label->setScaledContents(true);  //使图片自适应标签

    ui->password_label->setPixmap(QPixmap(":/pictrue/passwd.jpg"));
    ui->password_label->setScaledContents(true);  //使图片自适应标签
    ui->password_Edit->setEchoMode(QLineEdit::Password);


    login_Button->move(ui->password_label->x(),ui->password_label->y()+ui->password_label->height()+30);
    login_Button->resize(60,30);

    cancel_Button->move(login_Button->x()+login_Button->width()+30,login_Button->y());
    cancel_Button->resize(login_Button->size());

    connect(cancel_Button,SIGNAL(clicked()),this,SLOT(my_slot()));
    connect(login_Button,SIGNAL(clicked()),this,SLOT(my_slot1()));

}

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

void login::my_slot()
{
    this->close();
}

void login::my_slot1()
{
    QString user,password;
    user = ui->user_Edit->text();
    password = ui->password_Edit->text();
    if(user == "admin" & password == "12345678")
    {
        qDebug() << "登陆成功" <<endl;
        this->close();
    }
    else
    {
        qDebug() << "登陆失败" <<endl;
        ui->user_Edit->clear();
        ui->password_Edit->clear();
    }
}

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

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

相关文章

老师发布月考成绩的必备小程序

随着新学期的到来&#xff0c;教师们面临着诸多挑战&#xff0c;从课程规划到班级管理&#xff0c;再到学生的个别指导&#xff0c;每一项任务都至关重要。是否有工具能够帮助教师们在这些繁忙的事务中找到一丝轻松呢&#xff1f; “易查分”小程序正是为了解决这一问题而设计…

云原生学习交流

欢迎加入技术交流群&#xff0c;与阿里、腾讯、字节、华为等运维大佬面对面交流和互相学习。 请扫码备注 加群&#xff0c;<城市>-<公司/自由职业>-<昵称>&#xff0c;如“加群&#xff0c;广州-阿里-行则”&#xff1a;

基于SpringBoot的教师人事档案管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 教师管理 奖惩…

本地服务器部署Text generation并添加code llama实现远程多人协作

文章目录 前言1. 本地部署Text generation Web UI2. 安装CodeLlama大模型3. 实现公网远程使用Code Llama4. 固定Text generation Web UI公网地址 前言 本篇文章介绍如何在本地部署Text generation Web UI并搭建Code Llama大模型运行,并且搭建Code Llama大语言模型&#xff0c;…

关于HashMap的put方法

前言&#xff1a; HashMap的底层是数组加链表的形式实现&#xff0c;是线程不安全的&#xff0c;在jdk1.7之前put都是采用的头插法&#xff0c;但是使用头插法在多线程的环境下是有可能导致死循环&#xff0c;所以在jdk1.8就将put方法改成了尾插法。 1.产生死循环的原因&…

mfc140u.dll错误是什么情况?如何将mfc140u.dll丢失的解决方法详细分析

mfc140u.dll是 Microsoft Foundation Class (MFC) 库的一部分&#xff0c;通常与 Visual Studio 2015 及其后续版本相关联。如果系统中缺少 mfc140u.dll&#xff0c;可能会导致依赖该库的应用程序无法启动&#xff0c;并显示错误消息&#xff0c;如“程序无法启动&#xff0c;因…

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月9日新模型预测第82弹

经过80多期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;70多期一共只错了8次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c…

CCF推荐A类会议和期刊总结(计算机网络领域)- 2022

CCF推荐A类会议和期刊总结&#xff08;计算机网络领域&#xff09;- 2022 在中国计算机学会&#xff08;CCF&#xff09;的推荐体系中&#xff0c;A类会议和期刊代表着计算机网络领域的顶尖水平。这些会议和期刊不仅汇集了全球顶尖的研究成果&#xff0c;还引领着该领域的前沿发…

梨花声音研修院退费普通话学习对国际交流的影响

随着中国在国际舞台上的影响力不断增强&#xff0c;普通话在国际交流中的作用日益显著。普通话不仅是中国的国家通用语言&#xff0c;也是全球范围内越来越重要的一种交流工具。通过学习普通话&#xff0c;不仅可以促进国际合作、增强留学和旅游体验&#xff0c;还能拓展全球就…

哈希表,算法

哈希存储(散列存储) 为了快速定位数据 哈希表 哈希冲突 / 哈希矛盾 关键字不一样&#xff0c;但是映射之后结果一样 如何避免 哈希矛盾&#xff1f; 1、重新设计哈希函数&#xff0c;尽可能均匀散列分布在哈希表 2、开放定址法&#xff1a;向下寻找未存储的位置进行存放数…

【简历】 25届广州某二本JAVA简历:包装的实习经历是不能作为工龄的

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份25届广州某二本学校的Java简历。校招备战上来第一任务就是要定校招层次&#xff0c;因为大中小公司的校招时间点要求、面试官的…

DevExpress WinForms中文教程:Data Grid - 如何自定义绘制?

在本教程中&#xff0c;您将学习如何使用DevExpress grid View&#xff08;网格视图&#xff09;的CustomDraw…事件&#xff0c;您将从一个显示普通任务数据的网格开始。首先使用事件来自定义单元格外观&#xff0c;然后修改相同的事件处理程序&#xff0c;来根据网格数据更改…

java 自定义注解校验实体类属性

直接上代码 1.是否启用参数校验注解 Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface EnableArgumentsCheck {/*** 是否启用*/boolean enable() default true;} 2.参数校验自定义注解 /*** 参数校验自定义注解* 属性定义&#…

打造企业专属品牌,就要跟上云微客短视频矩阵新风口

网红经济在经济发展中是一个周期性的事件&#xff0c;很多人还没有意识到短视频带货、直播带货等红利时&#xff0c;有一群人早就已经进去了。但是现在网红带货时代已经结束了&#xff0c;那么新的风口是什么呢&#xff1f; 其实找网红带货&#xff0c;看似是提高了销售业绩&am…

[CTF夺旗赛] CTFshow Web1-12 详细过程保姆级教程~

文章目录 前言Web1Web2Web3Web4Web5Web6Web7Web8Web9Web10Web11Web12 前言 ​ CTFShow通常是指网络安全领域中的“Capture The Flag”(夺旗赛)展示工具或平台。这是一种用于分享、学习和展示信息安全竞赛中获取的信息、漏洞利用技巧以及解题思路的在线社区或软件。参与者会在比…

Linux IO模型(多路复用)

【1】Linux IO模型&#xff1a;IO多路复用 场景假设二 假设妈妈有三个孩子&#xff0c;分别不同的房间里睡觉&#xff0c;需要及时获知每个孩子是否醒了&#xff0c;如何做&#xff1f; 1.一直在一个房间呆着&#xff1a;看不到其他两个孩子 2.每个房间不停的看&#xff1a;可以…

python进阶篇-day09-数据结构与算法(非线性结构与排序算法)

非线性结构(树状结构) 特点: 每个节点都可以有n个子节点(后继节点) 和 n个父节点(前驱节点) 代表: 树, 图...... 概述 属于数据结构之 非线性结构的一种, 父节点可以有多个子节点(后续节点) 特点 有且只有1个根节点 每个节点都可以有1个父节点及任意个子节点, 前提: 根节点除…

C 408—《数据结构》算法题基础篇—链表(上)

目录 Δ前言 一、链表中特定值结点的删除 0.题目&#xff1a; 1.算法设计思想&#xff1a; 2.C语言描述&#xff1a; 3.算法的时间和空间复杂度&#xff1a; 二、链表链表最小值结点的删除 0.题目 : 1.算法设计思想 : 2.C语言描述 : 3.算法的时间和空间复杂度 : 三、链…

E32.【C语言】练习:指针运算习题集(下)(未完)

Exercise 6:阿里巴巴面试题 求下列代码的执行结果 #include <stdio.h> int main() {char *a[] {"work","at","alibaba"};char**pa a;pa;printf("%s\n", *pa);return 0; } 答案速查: 分析: char *a[] {"work",…

计算机组成原理(第一课)

计算机系统概述 1.发展史 摩尔定律&#xff1a;集成电路上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍 2.操作系统组成 存储程序程序控制 五个部分记住&#xff1a; 输入输出功能 I/O 记忆功能 访问 计算功能 计算 判断功能 判断 自我控制功能 自我控制…