【Qt 学习笔记】按钮实现helloworld | 信号与槽概述

简介: 【Qt 学习笔记】按钮实现helloworld | 信号与槽概述


  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

按钮实现helloworld | 初识信号与槽

文章编号:Qt 学习笔记 / 09



一、图形化实现helloworld

1. 实现步骤

  1. 创建一个Qt项目,参考文章《使用QtCreator创建及运行项目 | 项目初始代码解释》
  2. 打开widget.ui文件,将Push Button控件拖拽至界面,并对按钮进行编辑内容

  3. 引入信号槽connect

  1. 编辑handleClick函数,识别按钮中文本是helloworld时点击切换成helloqt,反之则切换,函数代码如下
void Widget::handleClick()
{
    if(ui->pushButton->text()== QString("helloworld"))
    {
        qDebug() <<"helloqt";
        ui->pushButton->setText("helloqt");
    }
    else
    {
        qDebug() <<"helloworld";
        ui->pushButton->setText("helloworld");
    }
}
  1. 点击运行,即可

2. 代码演示

//widget.h
#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();
    void handleClick();
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,&Widget::handleClick);
}
Widget::~Widget()
{
    delete ui;
}
void Widget::handleClick()
{
    if(ui->pushButton->text()== QString("helloworld"))
    {
        qDebug() <<"helloqt";
        ui->pushButton->setText("helloqt");
    }
    else
    {
        qDebug() <<"helloworld";
        ui->pushButton->setText("helloworld");
    }
}

二、纯代码实现helloworld

1. 实现步骤

  1. 创建一个Qt项目,参考文章《使用QtCreator创建及运行项目 | 项目初始代码解释》
  2. 打开widget.cpp文件,建立一个PushButton控件,在widget.h文件中将QPushButton* button设为全局变量
//widget.h
private:
    Ui::Widget *ui;
    QPushButton* button;
//widget.cpp
button=new QPushButton(this);
  1. 编辑按钮内的文字
button->setText("helloworld");
  1. 进行信号连接
connect(button,&QPushButton::clicked,this,&Widget::handleClick);
  1. 编辑handleClick函数,识别按钮中文本是helloworld时点击切换成helloqt,反之则切换,函数代码如下
void Widget::handleClick()
{
    if(button->text()==QString("helloworld"))
    {
        button->setText("helloqt");
    }
    else
    {
        button->setText("helloworld");
    }
}
  1. 点击运行,即可

2. 代码演示

//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void handleClick();
private:
    Ui::Widget *ui;
    QPushButton* button;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    button=new QPushButton(this);
    button->setText("helloworld");
    connect(button,&QPushButton::clicked,this,&Widget::handleClick);
}
Widget::~Widget()
{
    delete ui;
}
void Widget::handleClick()
{
    if(button->text()==QString("helloworld"))
    {
        button->setText("helloqt");
    }
    else
    {
        button->setText("helloworld");
    }
}

三、信号与槽

在上面的代码中出现connect

connect(button,&QPushButton::clicked,this,&Widget::handleClick);

在这里简单的提到一下Qt中信号与槽这个概念,在后续文章会对这方面内容进行详细的解释

1. 信号与槽概述

在Qt中,信号和槽是一种用于对象间通信的机制。它允许一个对象(发送者)通过发出信号,通知其他对象(接收者或槽函数)某个事件已经发生,而接收者则通过连接到信号的槽函数来响应这个事件。

以下是信号和槽的一些概述:

  1. 信号:信号是一种特殊的成员函数,用于通知其他对象某个事件已经发生。它们由关键字“signals”声明,并以特定格式定义。信号可以没有参数,也可以带有参数。
  2. 槽:槽是一种普通成员函数,用于接收信号,并执行一些相应的操作。槽函数可以有任意数量的参数,但必须与信号的参数列表匹配。槽函数可以被重载。
  3. 连接:连接是将信号与槽函数关联起来的过程。连接意味着当信号被发出时,相应的槽函数将被自动调用。可以使用QObject类的connect函数来建立连接。
  4. 发送信号:可以通过在对象中调用信号函数,来发出特定的信号。当信号被发出时,与之相连接的槽函数将被调用。
  5. 自定义信号和槽:在Qt中,可以自定义信号和槽来实现特定的功能。通过将自定义信号和槽函数添加到自定义的QObject派生类中,可以实现对象间的自定义通信。

目录
相关文章
|
1月前
|
编译器
(9)Qt中信号与槽重载的解决方案
本文介绍了在Qt中处理信号与槽重载问题的三种解决方案:使用函数指针、Qt提供的QOverload类和Qt4的宏方式。
99 3
|
1月前
(8)Qt中的自定义信号
本文介绍了如何在Qt框架中创建和使用自定义信号,并通过一个父子窗口切换的示例来展示自定义信号的实现和应用。
69 3
(8)Qt中的自定义信号
|
16天前
|
C++
003 Qt_信号和槽-上
本文介绍了Qt中的信号与槽机制,包括信号和槽的概念、本质及连接方法,并演示了如何自定义槽函数。信号是事件的体现,槽是对信号的响应函数。通过信号与槽,可以将独立的控件关联起来,实现复杂的交互逻辑。文中还详细展示了如何在Qt项目中定义和使用槽函数,通过实例代码和图形化界面操作,帮助读者更好地理解和应用这一机制。
27 1
003 Qt_信号和槽-上
|
16天前
|
XML Linux C++
002 Qt_两种方式实现helloworld
本文介绍了在Qt中通过图形化与代码方式显示“Hello World”的方法。图形化方式通过拖拽控件实现,代码方式则在`widget.cpp`中创建`QLabel`对象。此外,文章还详细解释了对象树的概念及其在内存管理中的作用,并解决了可能出现的乱码问题。
32 1
002 Qt_两种方式实现helloworld
|
3月前
|
程序员 C++
【Qt】信号与槽(下)
【Qt】信号与槽(下)
|
3月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
202 4
|
3月前
|
Linux C++
【Qt】信号与槽(上)
【Qt】信号与槽(上)
【Qt】信号与槽(上)
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
236 3
|
3月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
75 3
|
3月前
【qt】有点意思的信号与槽
【qt】有点意思的信号与槽
19 0