嵌入式Qt Qt中的信号处理

这篇具有很好参考价值的文章主要介绍了嵌入式Qt Qt中的信号处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.Qt中的信号处理

Qt消息模型:

- Qt封装了具体操作系统的消息机制

- Qt遵循经典的GUI消息驱动事件模型

嵌入式Qt Qt中的信号处理,Qt,qt,信号处理,开发语言

Qt中定义了与系统消息相关的概念;

嵌入式Qt Qt中的信号处理,Qt,qt,信号处理,开发语言 

Qt中的消息处理机制:

嵌入式Qt Qt中的信号处理,Qt,qt,信号处理,开发语言

Qt的核心 QObject::cinnect函数:

嵌入式Qt Qt中的信号处理,Qt,qt,信号处理,开发语言

Qt中的“新”关键字:

嵌入式Qt Qt中的信号处理,Qt,qt,信号处理,开发语言

实验1 初探信号与槽 

#include <QtGui/QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);//应用程序对象
    QPushButton b;//按钮对象
    b.setText("Click me to quit!");
    b.show();

//通过connect函数 将按钮对象的点击事件信号 映射到 a对象的quit()成员函数
    QObject::connect(&b, SIGNAL(clicked()), &a, SLOT(quit()));
    return a.exec();
}

 运行结果:

嵌入式Qt Qt中的信号处理,Qt,qt,信号处理,开发语言

二.自定义槽

- 只有QObject的子类才能自定义槽

- 定义槽的类必须在声明的最开始处使用Q_OBJECT

- 类中的声明槽时需要使用slots关键字

- 槽与所处理的信号在函数签名上必须一致

- SIGNAL和SLOT所指定的名称中:可以包含参数类型,不能包含具体的参数名

实验2 为计算器界面添加消息处理函数,所有按钮对应一个槽,打印同样log

目录:

嵌入式Qt Qt中的信号处理,Qt,qt,信号处理,开发语言

QCalculatorUI.h:

#ifndef _QCALCULATORUI_H_
#define _QCALCULATORUI_H_

#include <QWidget>
#include <QLineEdit>
#include <QPushButton>

class QCalculatorUI : public QWidget
{
    Q_OBJECT
private:
    QLineEdit* m_edit;
    QPushButton* m_buttons[20];

    QCalculatorUI();
    bool construct();
private slots:
    void onButtonClicked();
public:
    static QCalculatorUI* NewInstance();
    void show();
    ~QCalculatorUI();
};

#endif

QCalculatorUI.cpp:

#include "QCalculatorUI.h"
#include <QDebug>

QCalculatorUI::QCalculatorUI() : QWidget(NULL, Qt::WindowCloseButtonHint)
{

}

bool QCalculatorUI::construct()
{
    bool ret = true;
    const char* btnText[20] =
    {
        "7", "8", "9", "+", "(",
        "4", "5", "6", "-", ")",
        "1", "2", "3", "*", "<-",
        "0", ".", "=", "/", "C",
    };

    m_edit = new QLineEdit(this);

    if( m_edit != NULL )
    {
        m_edit->move(10, 10);
        m_edit->resize(240, 30);
        m_edit->setReadOnly(true);
    }
    else
    {
        ret = false;
    }

    for(int i=0; (i<4) && ret; i++)
    {
        for(int j=0; (j<5) && ret; j++)
        {
            m_buttons[i*5 + j] = new QPushButton(this);

            if( m_buttons[i*5 + j] != NULL )
            {
                m_buttons[i*5 + j]->resize(40, 40);
                m_buttons[i*5 + j]->move(10 + (10 + 40)*j, 50 + (10 + 40)*i);
                m_buttons[i*5 + j]->setText(btnText[i*5 + j]);

                connect(m_buttons[i*5 + j], SIGNAL(clicked()), this, SLOT(onButtonClicked()));
            }
            else
            {
                ret = false;
            }
        }
    }

    return ret;
}

QCalculatorUI* QCalculatorUI::NewInstance()
{
    QCalculatorUI* ret = new QCalculatorUI();

    if( (ret == NULL) || !ret->construct() )
    {
        delete ret;
        ret = NULL;
    }

    return ret;
}

void QCalculatorUI::show()
{
    QWidget::show();

    setFixedSize(width(), height());
}

void QCalculatorUI::onButtonClicked()
{
    QPushButton* btn = (QPushButton*)sender();

    qDebug() << "onButtonClicked()";
    qDebug() << btn->text();
}

QCalculatorUI::~QCalculatorUI()
{

}

main.cpp:

#include <QApplication>
#include "QCalculatorUI.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QCalculatorUI* cal = QCalculatorUI::NewInstance();
    int ret = -1;

    if( cal != NULL )
    {
        cal->show();

        ret = a.exec();

        delete cal;
    }

    return ret;
}

运行结果:点击 ”7“  ”8“  ”9“

嵌入式Qt Qt中的信号处理,Qt,qt,信号处理,开发语言 

 文章来源地址https://www.toymoban.com/news/detail-835002.html

到了这里,关于嵌入式Qt Qt中的信号处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 嵌入式实时操作系统的设计与开发(信号量学习)

    除了临界点机制、互斥量机制可实现临界资源的互斥访问外,信号量(Semaphore)是另一选择。 信号量与互斥量的区别 对于互斥量来说,主要应用于临界资源的互斥访问,并且能够有效地避免优先级反转问题。 对于信号量而言,它虽然也能用于临界资源的互斥访问,但是不能

    2024年02月08日
    浏览(13)
  • 嵌入式QT- QT使用MQTT

    嵌入式QT- QT使用MQTT

    目录 一、MQTT介绍 二、MQTT概念   2.1 订阅(Subscribtion)   2.2 会话(Session)   2.3 主题名(Topic Name)    2.4 主题筛选器(Topic Filter)    2.5 消息订阅 三、MQTT中的角色 3.1 客户端 3.2 服务器 四、X86平台安装mosquitto 4.1 下载 mosquitto 服务器 4.2 下载 mosquitto 客户端 4.3 mosquitto 命令

    2024年02月13日
    浏览(6)
  • 嵌入式Qt 第一个Qt项目

    嵌入式Qt 第一个Qt项目

    打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项   弹出New Project对话框,选择Qt Widgets Application 选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步   选择编译套件 向导会默认添加一个继承自QMainWindow的类,可

    2024年02月20日
    浏览(10)
  • 【嵌入式——QT】容器类

    Qt提供了基于模板的容器类,这些容器类可以用于存储指定类型的数据项,Qt的容器类比标准模板库(STL)中的容器类更轻巧、安全和易于使用。它们还是线程安全的,它们作为只读容器时可被多个线程访问。 容器类是基于模板的类,如常用的容器类QList,T是一个具体的类型,可

    2024年02月22日
    浏览(12)
  • 嵌入式 QT 界面布局管理

    嵌入式 QT 界面布局管理

    目录 1、实例程序功能 2、界面组件布局 2.1 界面组件的层次关系 2.2 布局管理 2.3 伙伴关系和Tab顺序       创建一个 Widget Application 项目 samp2_2, 在创建窗体时选择基类 QDialog ,生成的类命名为 QWDialog ,并选择生成窗体。     如 此 新建 的项 目 samp2_2 有一 个界 面文 件 qwdi

    2024年02月04日
    浏览(14)
  • 【嵌入式——QT】QStyledItemDelegate用法详解

    【嵌入式——QT】QStyledItemDelegate用法详解

    QStyledItemDelegate是所有Qt item视图的默认委托,在创建它们时就会被安装在它们上面。 QStyledItemDelegate类是模型/视图类之一,是Qt模型/视图框架的一部分。委托允许项目的显示和编辑独立于模型和视图进行开发。 模型中数据项的数据被赋值为ItemDataRole;每个物品可以为每个角色存

    2024年01月23日
    浏览(15)
  • 嵌入式:QT Day1

    嵌入式:QT Day1

    源码: widge.h  widge.cpp  main.cpp

    2024年02月15日
    浏览(13)
  • 嵌入式:QT Day4

    嵌入式:QT Day4

    源码: widget.h widget.cpp main.cpp

    2024年02月14日
    浏览(12)
  • 嵌入式:QT Day2

    嵌入式:QT Day2

    源码: widget.h second.h widget.cpp second.cpp main.cpp    

    2024年02月15日
    浏览(9)
  • 嵌入式I2C 信号线为何加上拉电阻(图文并茂)

    嵌入式I2C 信号线为何加上拉电阻(图文并茂)

    IIC 是一个两线串行通信总线,包含一个 SCL 信号和 SDA 信号,SCL 是时钟信号,从主设备发出,SDA 是数据信号,是一个双向的,设备发送数据和接收数据都是通过 SDA 信号。   在设计 IIC 信号电路的时候我们会在 SCL 和 SDA 上加一个上拉电阻。   今天就来分享下,为什么要在

    2024年02月19日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包