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()
{
}