在窗口类中创建按钮控件

1.在单个文件窗口类中创建按钮控件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QDebug>


// 1. 定义自定义类,继承自 QWidget
class MyWindow : public QWidget {
Q_OBJECT // 核心宏:启用信号槽、属性系统等元对象特性

public:
explicit MyWindow(QWidget *parent = nullptr) : QWidget(parent) {
// 设置窗口属性
setWindowTitle("Qt 完整类框架示例");
resize(400, 300);

// 创建按钮
m_button = new QPushButton("点击我或按键盘", this);
layout->addWidget(m_button);
}


private:
QPushButton *m_button; // 成员变量记录控件指针
};

// 4. 程序入口
int main(int argc, char *argv[]) {
QApplication a(argc, argv);

MyWindow hw; // 实例化自定义类
hw.show();

return a.exec();
}

// 如果是在单个 .cpp 文件中写 Q_OBJECT,必须包含生成的 moc 文件
// 只有在使用手动命令行编译或某些老旧构建系统时才需要这行
#include "main.moc"

2.窗口类声明与实现分开

1.main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
#include <QApplication>
#include "widget.h"

int main(int argc, char *argv[]) {
QApplication a(argc, argv);

Widget w;
w.show();

return a.exec();
}

2.widght.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton> // 必须包含按钮头文件

class Widget : public QWidget {
Q_OBJECT

public:
Widget(QWidget *parent = nullptr);
~Widget();

private:
QPushButton *m_button; // 定义为私有成员
};

#endif

3.Widget.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent) {
setWindowTitle("Button Example");
resize(400, 300);

// 1. 创建按钮,并设置文本
m_button = new QPushButton("Click Me", this);

//手动设置坐标:
m_button->setGeometry(150, 130, 100, 40);
}

Widget::~Widget() {
// 不需要 delete m_button,因为它是 this 的子对象,Qt 会自动释放
}