概述
目录
- 一、信号与槽函数
- 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_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void mybutton_fun();//槽函数1
void 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_OBJECT
public:
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_OBJECT
public:
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信号与槽函数(QT二)一、信号与槽函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复