Qt5教程: (2) 信号与槽
2024-09-01 10:53:27
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/
最新文章
- PhpStorm集成xdebug进行断点调试
- mybatis动态调用表名和字段名
- 【BZOJ3439】Kpm的MC密码 trie树+主席树
- $使用dom4j可解析 返回&;#x等字样的 html转义字符
- Android用AutoCompleteTextView实现搜索历史记录提示
- HDU 1754 I Hate It(线段树)
- 【转】Android 4.3源码的下载和编译环境的安装及编译
- PHP扩展开发01:第一个扩展【转】
- hadoop2对比hadoop1
- CoreData (四)备
- LINUX查看硬件配置命令
- dom4j生成和解析xml文件
- pl_sql develope连接远程数据库的方法
- 记一次504 Gateway Time-out
- linux中的pwd
- 区别JS中类的静态方法,静态变量,实例方法,实例变量
- Android 获得图片并解码成缩略图以减少内存消耗
- spark脚本日志输出级别设置
- html5调用手机本地摄像头和相册识别二维码详细实现过程
- django1.8 增加注册用户其他字段(用户扩展)