Qt信号与槽函数(QT二)
目录
- 一、信号与槽函数
- 1.自定义槽函数
- 2.自定义信号
- (1)信号声明
- (2)自定义信号和发送例子
- 3.界面切换
- (1)从firstWin -> secondWin 不需要返回
- (2)从secondWin -> thirdWin需要返回
- (3)从thirdWin -> SecondWin
- (4)优化
- 4.界面间参数传递
- (1)firstwin类
- (2)secondwin类
- (3)firstwin.cpp
- (4)secondwin.cpp
- 5.样式
- (1)组件样式设置
- (2)在组件上显示图片
一、信号与槽函数
Qt自带的一种通信机制
按钮的部分内置信号有
Signals
void clicked(bool checked = false)
void pressed()
void released()
void toggled(bool checked)
例如设置点击按钮时关闭窗口
当button按钮被点击的时候会发送 clicked信号
窗口要在点击按钮时候关闭 -> 窗口接受按钮发送的信号并且调用关闭窗口的槽函数
按钮发送信号,窗口接收后调用关闭槽函数
QPushButton自带clicked信号, MainWindow中自带close槽函数
//把按钮的点击clicked信号窗口(this)的close槽函数关联
connect(ui->bt,&QPushButton::clicked, this, &MainWindow::close);
1.自定义槽函数
private slots://自定义槽函数void myprint(); //槽函数声明----必须要实现
void MainWindow::myprint() //槽函数实现
{qDebug()<<"hello world";
}
把printBt按钮的信号与槽函数myprint关联
connect(ui->printBt,&QPushButton::clicked,this, &MainWindow::myprint);
Qt中调试输出类
#include <QDebug>
qDebug()<<"hello";
获取输入框中的内容转为数值–计算–转为字符串QString显示
QString first = ui->firstNum->text();QString second = ui->secondNum->text();ui->label->setText("+");//把字符串转数值在进行计算double result = first.toDouble()+second.toDouble();//结果显示--把数值result转字符串ui->result->setText(QString::number(result));
2.自定义信号
(1)信号声明
signals:void mysignal();//自定义信号---不需要实现
信号发送
void MainWindow::mybutton_fun()
{qDebug()<<"槽函数1";//发送信号---emit mysignal();
}
(2)自定义信号和发送例子
mainwindow.h
#include <QMainWindow>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();
private slots:void mybutton_fun();//槽函数1void selfbutton_fun();//槽函数2
signals:void mysignal();//自定义信号---不需要实现
private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);//把按钮的clicked信号关联mybutton_fun槽函数connect(ui->button, &QPushButton::clicked,this, &MainWindow::mybutton_fun);//把mysignal信号与selfbutton_fun槽函数关联connect(this, &MainWindow::mysignal, this, &MainWindow::selfbutton_fun);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::mybutton_fun()
{qDebug()<<"槽函数1";//发送信号---emit mysignal();
}void MainWindow::selfbutton_fun()
{qDebug()<<"槽函数2";
}
3.界面切换
打开一个界面,点击按钮后打开第二个界面;在第二个界面中点击close按钮关闭界面,点击next按钮打开第三个界面;在第三个界面中点击back返回第二个界面。
注意:在创建多个界面时,所有的界面必须都继承QMainWindows
(1)从firstWin -> secondWin 不需要返回
void FirstWin::on_nextBt_clicked()
{SecondWin *win = new SecondWin;win->show();//把第一个界面给销毁this->close();
}
(2)从secondWin -> thirdWin需要返回
void SecondWin::on_nextBt_clicked()
{//创建第三个界面ThirdWin *win = new ThirdWin(this);win->show();this->hide();//隐藏第二个界面
}
(3)从thirdWin -> SecondWin
void ThirdWin::on_prevBt_clicked()
{//返回到第二个界面this->parentWidget()->show();delete this;//第三个界面释放
}
(4)优化
为防止使用者在中途关闭界面,可采用一下方式隐藏关闭按钮(一下方式二选一即可)
//全屏显示
this->showFullScreen();
//标题栏隐藏
this->setWindowFlag(Qt::FramelessWindowHint);
4.界面间参数传递
创建两个界面,在第一个界面中输入内容后,点击按钮,将输入的内容发送到第二界面显示,第二个界面同理。
注意:在创建多个界面时,所有的界面必须都继承QMainWindows
(1)firstwin类
class firstwin : public QMainWindow
{Q_OBJECTpublic:firstwin(QWidget *parent = nullptr);~firstwin();private slots:void on_nextbt_clicked();void on_nextbt_2_clicked();void recvdata(QString data);private:Ui::firstwin *ui;secondwin *win;
};
(2)secondwin类
class secondwin : public QMainWindow
{Q_OBJECTpublic:explicit secondwin(QWidget *parent = nullptr);~secondwin();void setdata(QString data);
private slots:void on_backbt_clicked();
signals:void senddata(QString data);
private:Ui::secondwin *ui;QString fromfirstdata;
};
(3)firstwin.cpp
#include "firstwin.h"
#include "ui_firstwin.h"
#include "secondwin.h"firstwin::firstwin(QWidget *parent): QMainWindow(parent), ui(new Ui::firstwin)
{ui->setupUi(this);win = nullptr;}firstwin::~firstwin()
{delete ui;
}void firstwin::on_nextbt_clicked()
{QString data = ui->line->text();if(win == nullptr){win = new secondwin(this);connect(win,&secondwin::senddata,this,&firstwin::recvdata);}win->setdata(data);win->show();this->hide();
}void firstwin::on_nextbt_2_clicked()
{this->close();
}void firstwin::recvdata(QString data)
{ui->label->setText(data);
}
(4)secondwin.cpp
#include "secondwin.h"
#include "ui_secondwin.h"secondwin::secondwin(QWidget *parent) :QMainWindow(parent),ui(new Ui::secondwin)
{ui->setupUi(this);
}secondwin::~secondwin()
{delete ui;
}void secondwin::setdata(QString data)
{this->fromfirstdata = data;ui->label->setText(fromfirstdata);
}void secondwin::on_backbt_clicked()
{QString data = ui->line->text();emit senddata(data);this->parentWidget()->show();delete this;
}
5.样式
(1)组件样式设置
在ui文件设计中,右击QMainWindows,点击改变样式表
①改变所有同类型组件的样式
组件类型{设置想要改变的样式;
}
例:
QPushButton
{color:green;//设置字体颜色border:12px solid#123456;//设置边界宽度和颜色background-color:red;//设置背景颜色
}
②改变某个组件的样式
组件类型#组件名{设置想要改变的样式;
}
例:
QPushButton#firstbt
{color:green;border:12px solid#123456;background-color:red;
}
(2)在组件上显示图片
①新建Qt Resource File
新建完成后生成.qrc
②添加前缀
③添加图片文件
④进入改变样式表,选择添加资源
⑤选择你想要添加的图片即可
Qt信号与槽函数(QT二)相关推荐
- QT信号和槽函数学习笔记
//connect 函数有4个参数 分别是 发送者 信号.接受者 ,槽 //connect(sender,signal,receiver,slot) /* * 信号和槽 * 信号 就是一个普通的函数 ...
- Qt信号和槽函数连接不成功原因
Qt信号和槽连接失败原因主要有以下几点: 1.槽函数并没有声明在类的public slots(或private slots或protected slots)里,因此,所想要成为槽函数的那个函数只是普普 ...
- QT信号与槽——观察者模式——回调函数
QT信号与槽--观察者模式--回调函数 1.QT信号与槽机制 1.1信号本质 信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时候 Qt 对应的窗口类会发出某个信号.比如 ...
- 【QT】无需写connect代码关联信号和槽函数
对于一些简单的事件判别,如点击按钮. 无需写代码关联信号和槽函数. connect(ui->Btnshowhello,SIGNAL(clicked(bool)),this,SLOT(Btnsho ...
- Qt 信号与槽 讲解与案例
文章目录 信号与槽 绑定信号与槽 简单案例:按钮的点击 自定义槽函数 自定义信号 信号和槽重载二义性问题 解决方案 案例: 实现两个窗口间的切换 信号与槽 所谓信号槽,实际就是观察者模式(发布-订阅模 ...
- Qt 信号和槽 事件处理
一:Qt信号和槽概述 信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本章介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. 信号和槽机制是QT的核心机制,要精通QT ...
- Qt信号与槽的拓展和案例
1.标准信号和槽的使用: 2.自定义的信号与槽的使用: 4. 信号槽拓展 4.1 信号槽使用拓展 一个信号可以连接多个槽函数, 发送一个信号有多个处理动作 需要写多个connect连接 信号的接收者可 ...
- Qt 信号和槽机制 优点 效率的详解
一.信号和槽机制 Qt提供了信号和槽机制用于完成界面操作的响应,是完成任意两个Qt对象之间的通信机制. 其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数. 二..信号和槽机制的 ...
- 【Qt】Qt信号与槽使用不当,使程序崩溃
问题描述 跨线程使用Qt信号和槽,信号发送时间间隔小于槽函数处理时间时,造成程序崩溃. 原因分析 跨线程使用Qt信号和槽时,connect默认是QueuedConnection,队列连接方式. 信号传 ...
最新文章
- 「它将改变一切」,AI「诺奖级」里程碑!DeepMind 破解蛋白质分子折叠问题
- 笔记1-3: 从标准输入读取命令并执行
- 死锁:多线程同时删除唯一索引上的同一行
- 达摩院年终预测出炉:2022 十大科技趋势,AI for Science 高居榜首
- java利用htmlparser得到网页html内容
- Sanic 连接postgresql数据库
- bzoj 4031 [HEOI2015]小Z的房间
- 计算机文字录入教案,《文字录入》(1-4)教案.doc
- php7 fastdfs,关于centos7 fastdfs部署
- vb教材笔记_vb学习笔记
- 携程数据分析笔试第一题
- 满格信号服务器开小差,明明信号满格,网络却很慢?教你三招解决!
- JS实现鼠标点击爱心绘制多边形每日一言功能
- 电力电子技术——sepic和zeta电路分析
- 列表(list)使用方法详解
- upupoo启动不了 mysql_【upupoo动态桌面壁纸和MySQL API 中文手册哪个好用】upupoo动态桌面壁纸和MySQL API 中文手册对比-ZOL下载...
- pycharm注册码,之前的已经过期
- 云行 | 让数据奔驰在“云”间,天翼云助力贵州筑牢算力底座
- 一看就懂→专票电子化的三条实现路径
- c语言程序设计的实验报告,C语言程序设计实验报告
热门文章
- Python再入手-01
- matlab中toolbox在哪里,GRACE_Matlab_Toolbox使用简介
- 斯蒂文斯理工学院计算机科学硕士,2020年史蒂文斯理工学院硕士含金量
- 获取WORD的高位字节和低位字节
- 多多进宝小程序源码_【图片】多多进宝小程序 拼多客CMS 分销系统_多多进宝吧_百度贴吧...
- iOS截屏功能的实现
- 梦网云通讯API接口匹配状态报告规则
- 有道词典在线翻译爬虫
- CSS.box-sizing属性(让你看到不同的解释,直达问题本质)
- 阿里巴巴集团技术委员会主席王坚:我曾经被诺贝尔奖得主司马贺忽悠,相信人工智能就是未来!...