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

devtools/2024/10/18 14:17:23/

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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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_NAMESPACEclass login : public QWidget
{Q_OBJECTpublic: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.ppmy.cn/devtools/109994.html

相关文章

linux top命令介绍以及使用

文章目录 介绍 top 命令1. top 的基本功能2. 如何启动 top3. top 的输出解释系统概况任务和 CPU 使用情况内存和交换空间进程信息 4. 常用操作 总结查看逻辑CPU的个数查看系统运行时间 介绍 top 命令 top 是一个在类 Unix 系统中广泛使用的命令行工具&#xff0c;用于实时显示…

【JavaWeb】JDBCDruidTomcat入门使用

本章使用技术版本&#xff1a; Tomcatv10.1.25 关于javaweb相关的其他技术&#xff0c;比如tomcat和maven&#xff0c;在我的主页记录了笔记&#xff0c;ajax我用的是本地笔记以后再考虑上传&#xff0c;前端三板斧我用的菜鸟教程文档 JDBC 初识 JDBC概念 JDBC 就是使用Jav…

k8s 存储(PV、PVC、SC、本地存储、NFS)

存储持久化相关三个概念: PersistentVolume (PV) 是对具体存储资源的描述&#xff0c;比如NFS、Ceph、GlusterFS等&#xff0c;通过PV可以访问到具体的存储资源;PersistentVolumeClaim (PVC) Pod想要使用具体的存储资源需要对接到PVC&#xff0c;PVC里会定义好Pod希望使用存储…

机器学习和物联网驱动技术在加工过程中监测工具磨损:一项全面的综述

这篇论文的标题是《Machine-Learning and Internet-of-Things-Driven Techniques for Monitoring Tool Wear in Machining Process: A Comprehensive Review》&#xff0c;由 Sudhan Kasiviswanathan、Sakthivel Gnanasekaran、Mohanraj Thangamuthu 和 Jegadeeshwaran Rakkiya…

hive时间函数

一、随机示例&#xff08;想到哪里写哪里&#xff09; 1.系统时间函数 查询 select current_timestamp --当前格式化时间,current_date --当前格式化日期,unix_timestamp() --当前unix时间戳 结果&#xff1a; 2.时间函数转换 查询 --将时间戳转化为格式化时间 sel…

python-新冠病毒

题目描述 假设我们掌握了特定时间段内特定城市的新冠病毒感染病例的信息。在排名 i 的当天有 i 个案例&#xff0c;即&#xff1a; 第一天有一例感染第二天有两例感染第三天有三例感染以此类推...... 请计算 n 天内的感染总数和每天平均感染数。 输入 整数 n 表示天数&…

【uni-app】通过 HBuilderX 创建 uni-app vue3项目

1.下载 HbuilderX 编辑器 访问 HBuilderX 的官网首页 https://www.dcloud.io/hbuilderx.html 点击首页的 DOWNLOAD 按钮 选择下载 正式版 -> App 开发版 2. 安装 HBuilderX 将下载的 zip包 进行解压缩 将解压之后的文件夹&#xff0c;存放到纯英文的目录中&#xff08;且…

14. /#{} 和 /${} 的区别是什么?

在MyBatis中&#xff0c;#{}和${}是两种常见的占位符&#xff0c;它们的作用和使用场景有所不同。理解它们的区别对于正确使用MyBatis非常重要。 1. #{} 和 ${} 的基本区别 #{}&#xff1a;SQL参数占位符 作用&#xff1a;#{}用于将传入的参数安全地绑定到SQL语句中&#xff0c…