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/

最新文章

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

热门文章

  1. 学习笔记_第十天_方法_方法的综合练习---ref练习
  2. 松软科技课堂:SQLUNION和UNIONALL操作符
  3. C++程序设计学习
  4. .NET Conf 2019日程(北京时间)
  5. [Algorithm] Hashing for search
  6. Beescms_v4.0 sql注入漏洞分析
  7. Java职责链模式
  8. python正则表达式字符记录
  9. thinkphp将上传的临时文件移动到指定目录
  10. 删除pdf中的链接