目录

  • 一、信号与槽函数
    • 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二)相关推荐

  1. QT信号和槽函数学习笔记

    //connect 函数有4个参数 分别是 发送者 信号.接受者 ,槽 //connect(sender,signal,receiver,slot) /* * 信号和槽 * 信号 就是一个普通的函数 ...

  2. Qt信号和槽函数连接不成功原因

    Qt信号和槽连接失败原因主要有以下几点: 1.槽函数并没有声明在类的public slots(或private slots或protected slots)里,因此,所想要成为槽函数的那个函数只是普普 ...

  3. QT信号与槽——观察者模式——回调函数

    QT信号与槽--观察者模式--回调函数 1.QT信号与槽机制 1.1信号本质 信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时候 Qt 对应的窗口类会发出某个信号.比如 ...

  4. 【QT】无需写connect代码关联信号和槽函数

    对于一些简单的事件判别,如点击按钮. 无需写代码关联信号和槽函数. connect(ui->Btnshowhello,SIGNAL(clicked(bool)),this,SLOT(Btnsho ...

  5. Qt 信号与槽 讲解与案例

    文章目录 信号与槽 绑定信号与槽 简单案例:按钮的点击 自定义槽函数 自定义信号 信号和槽重载二义性问题 解决方案 案例: 实现两个窗口间的切换 信号与槽 所谓信号槽,实际就是观察者模式(发布-订阅模 ...

  6. Qt 信号和槽 事件处理

    一:Qt信号和槽概述 信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本章介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. 信号和槽机制是QT的核心机制,要精通QT ...

  7. Qt信号与槽的拓展和案例

    1.标准信号和槽的使用: 2.自定义的信号与槽的使用: 4. 信号槽拓展 4.1 信号槽使用拓展 一个信号可以连接多个槽函数, 发送一个信号有多个处理动作 需要写多个connect连接 信号的接收者可 ...

  8. Qt 信号和槽机制 优点 效率的详解

    一.信号和槽机制 Qt提供了信号和槽机制用于完成界面操作的响应,是完成任意两个Qt对象之间的通信机制. 其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数. 二..信号和槽机制的 ...

  9. 【Qt】Qt信号与槽使用不当,使程序崩溃

    问题描述 跨线程使用Qt信号和槽,信号发送时间间隔小于槽函数处理时间时,造成程序崩溃. 原因分析 跨线程使用Qt信号和槽时,connect默认是QueuedConnection,队列连接方式. 信号传 ...

最新文章

  1. 「它将改变一切」,AI「诺奖级」里程碑!DeepMind 破解蛋白质分子折叠问题
  2. 笔记1-3: 从标准输入读取命令并执行
  3. 死锁:多线程同时删除唯一索引上的同一行
  4. 达摩院年终预测出炉:2022 十大科技趋势,AI for Science 高居榜首
  5. java利用htmlparser得到网页html内容
  6. Sanic 连接postgresql数据库
  7. bzoj 4031 [HEOI2015]小Z的房间
  8. 计算机文字录入教案,《文字录入》(1-4)教案.doc
  9. php7 fastdfs,关于centos7 fastdfs部署
  10. vb教材笔记_vb学习笔记
  11. 携程数据分析笔试第一题
  12. 满格信号服务器开小差,明明信号满格,网络却很慢?教你三招解决!
  13. JS实现鼠标点击爱心绘制多边形每日一言功能
  14. 电力电子技术——sepic和zeta电路分析
  15. 列表(list)使用方法详解
  16. upupoo启动不了 mysql_【upupoo动态桌面壁纸和MySQL API 中文手册哪个好用】upupoo动态桌面壁纸和MySQL API 中文手册对比-ZOL下载...
  17. pycharm注册码,之前的已经过期
  18. 云行 | 让数据奔驰在“云”间,天翼云助力贵州筑牢算力底座
  19. 一看就懂→专票电子化的三条实现路径
  20. c语言程序设计的实验报告,C语言程序设计实验报告

热门文章

  1. Python再入手-01
  2. matlab中toolbox在哪里,GRACE_Matlab_Toolbox使用简介
  3. 斯蒂文斯理工学院计算机科学硕士,2020年史蒂文斯理工学院硕士含金量
  4. 获取WORD的高位字节和低位字节
  5. 多多进宝小程序源码_【图片】多多进宝小程序 拼多客CMS 分销系统_多多进宝吧_百度贴吧...
  6. iOS截屏功能的实现
  7. 梦网云通讯API接口匹配状态报告规则
  8. 有道词典在线翻译爬虫
  9. CSS.box-sizing属性(让你看到不同的解释,直达问题本质)
  10. 阿里巴巴集团技术委员会主席王坚:我曾经被诺贝尔奖得主司马贺忽悠,相信人工智能就是未来!...