zoukankan      html  css  js  c++  java
  • Qt5教程: (2) 信号与槽

    1. 新建工程

    新建一个"Qt Widgets Application"工程


    2. 添加按钮

    一个Qt工程会有很多个控件, 如果把逻辑代码都写在main函数里, main函数会非常长, 而且不方便维护, 所以最好把代码都在别的Sources中实现.

    2.1 修改mainwidget.h文件

    在 mainwidget.h 文件中添加头文件, 然后定义两个按钮, 一个正常定义, 一个使用指针:

    #ifndef MAINWIDGET_H
    #define MAINWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>  // 添加头文件
    
    class MainWidget : public QWidget
    {
        Q_OBJECT
    
    public:
        MainWidget(QWidget *parent = 0);
        ~MainWidget();
        
    private:
        QPushButton b1;  // 按钮1
        QPushButton *b2;  // 按钮指针2
    };
    
    #endif // MAINWIDGET_H
    

    2.2 修改mainwidget.cpp文件

    在cpp文件中指定按钮父对象, 按钮显示内容, 按钮位置:

    #include "mainwidget.h"
    
    
    MainWidget::MainWidget(QWidget *parent)
        : QWidget(parent)
    {
        b1.setParent(this);
        b1.setText("Button1");
        b1.move(50, 50);
    
        b2 = new QPushButton(this);
        b2->setText("Button2");
        b2->move(150, 50);
    }
    
    MainWidget::~MainWidget()
    {
    
    }
    

    保存后运行:

    3. 信号和槽

    这个时候我们点击按钮是没有反应的, 如果希望响应按键点击这个事件, 就需要使用Qt的信号与槽.
    我们把Button1的名字改为"Close", 然后我们希望点击"Close"按钮就关闭窗口, 这就需要将按钮1和窗口先建立连接:

    connect(&b1, &QPushButton::clicked, this, &MainWidget::close);
    

    &b1: 信号发出者, 指针类型; 这里是按钮1
    &QPushButton::clicked: &信号发送者::发送的什么信号; 这里是点击按钮
    this: 信号接受者; 这里是窗口
    &MainWidget::close: 信号接收者::槽函数, 信号处理函数; 这里是窗口关闭
    之后运行, 点击Close按钮, 窗口就会关闭了.

    附录

    main.cpp

    #include "mainwidget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWidget w;
        w.show();
    
        return a.exec();
    }
    

    mainwidget.h

    #ifndef MAINWIDGET_H
    #define MAINWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    
    class MainWidget : public QWidget
    {
        Q_OBJECT
    
    public:
        MainWidget(QWidget *parent = 0);
        ~MainWidget();
    
    private:
        QPushButton b1;
        QPushButton *b2;
    };
    
    #endif // MAINWIDGET_H
    

    mainwidget.cpp

    #include "mainwidget.h"
    
    MainWidget::MainWidget(QWidget *parent)
        : QWidget(parent)
    {
        b1.setParent(this);
        b1.setText("Close");
        b1.move(50, 50);
    
        b2 = new QPushButton(this);
        b2->setText("Button2");
        b2->move(150, 50);
    
        connect(&b1, &QPushButton::clicked, this, &MainWidget::close);
         // connect(&b1, SIGNAL(clicked()), this, SLOT(close()));  // Qt4 (Qt5也能用)
    }
    
    MainWidget::~MainWidget()
    {
    
    }
    
    

    此文原创禁止转载,转载文章请联系博主并注明来源和出处,谢谢!
    作者: Raina_RLN https://www.cnblogs.com/raina/

  • 相关阅读:
    【转载】JavaScript变量: 变量命名原则
    【转载】mysql运行报【The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone...】的解决方法
    Java Web 环境搭建
    原生JS消息提示插件Message.js
    SQL Server 参数嗅探问题
    根据表名和列名获取关联index的创建脚本
    mongodb快速均衡导入数据
    index optimize
    PG Foreign key 外键
    无密码登陆
  • 原文地址:https://www.cnblogs.com/raina/p/11311320.html
Copyright © 2011-2022 走看看