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/

  • 相关阅读:
    Atitit.eclise的ide特性abt 编译
    Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.eclipse 4.3 4.4  4.5 4.6新特性
    atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
    Atitit RSA非对称加密原理与解决方案
    Atitti.数字证书体系cer pfx attilax总结
    Atitit ftp原理与解决方案
    Atitit qzone qq空间博客自动点赞与评论工具的设计与实现
    Atitit 软件国际化原理与概论
  • 原文地址:https://www.cnblogs.com/raina/p/11311320.html
Copyright © 2011-2022 走看看