QT入门学习中最基础的那些事儿
原文链接:https://blog.csdn.net/qq_39355828/article/details/111057617 (opens new window)
# QT
- 编译流程
qmake -project ->.pro
qmake ->makefile 从而实现平台无关性
make ->可执行程序 执行qmake 构建 运行 2. 程序发布: 选择 release 生成exe文件
3.新建窗口Qwidget
QApplication a(argc, argv); 创建了一个QApplication对象,对象名为app,带两个参数argc,argv QApplication应该是继承于最根的父类QObject。没有这个app对象,程序就运行不起来了
#include <QApplication>
#include <QWidget>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget widget;
widget.resize(400, 300); // 设置窗口大小
widget.move(200, 100); // 设置窗口位置
widget.show();
int x = widget.x();
qDebug("x: %d", x); // 输出x的值
int y = widget.y();
qDebug("y: %d", y);
QRect geometry = widget.geometry();
QRect frame = widget.frameGeometry();
qDebug() << "geometry: " << geometry << "frame: " << frame;
return a.exec();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
qDebug 用于调试 向工作台输出信息
4.信号与槽
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
connect(ui->showChildButton, &QPushButton::clicked,
this, &MyWidget::showChildDialog);//用于激发下一个窗口 四个参数(发出信号 动作 接收信号 动作)
}
MyWidget::~MyWidget()
{
delete ui;
}
void MyWidget::showChildDialog()
{
QDialog *dialog = new QDialog(this);
dialog->show();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public slots:
void showChildDialog();
1
2
2
connect用于激发下一个窗口 四个参数(发出信号 动作 接收信号 动作)!!也可以在ui界面进行绑定 不需要connect
disconnect 用于断开连接 四个参数(发出信号 动作 接收信号 动作):比如可以使得登陆操作点击三次后 不能继续点击 断开机制
5.QT简单按钮操作
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDebug>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
#include <QInputDialog>
#include <QMessageBox>
#include <QProgressDialog>
#include <QErrorMessage>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
errordlg = new QErrorMessage(this);
}
MyWidget::~MyWidget()
{
delete ui;
}
// 颜色对话框
void MyWidget::on_pushButton_clicked()
{
// QColor color = QColorDialog::getColor(Qt::red, this, tr("颜色对话框"),
// QColorDialog::ShowAlphaChannel);
QColorDialog dialog(Qt::red, this); // 创建对象
dialog.setOption(QColorDialog::ShowAlphaChannel); // 显示alpha选项
dialog.exec(); // 以模态方式运行对话框
QColor color = dialog.currentColor(); // 获取当前颜色
qDebug() << "color: " << color;
}
// 文件对话框
void MyWidget::on_pushButton_2_clicked()
{
// QString fileName = QFileDialog::getOpenFileName(this, tr("文件对话框"),
// "D:", tr("图片文件(*png *jpg);;文本文件(*txt)"));
// qDebug() << "fileName:" << fileName;
QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("文件对话框"),
"D:", tr("图片文件(*png *jpg)"));
qDebug()<< "fileNames:" << fileNames;
}
// 字体对话框
void MyWidget::on_pushButton_3_clicked()
{
// ok用于标记是否按下了“OK”按钮
bool ok;
QFont font = QFontDialog::getFont(&ok, this);
// 如果按下“OK”按钮,那么让“字体对话框”按钮使用新字体
// 如果按下“Cancel”按钮,那么输出信息
if (ok) ui->pushButton_3->setFont(font);
else qDebug() << tr("没有选择字体!");
}
// 输入对话框
void MyWidget::on_pushButton_4_clicked()
{
bool ok;
// 获取字符串
QString string = QInputDialog::getText(this, tr("输入字符串对话框"),
tr("请输入用户名:"), QLineEdit::Normal,tr("admin"), &ok);
if(ok) qDebug() << "string:" << string;
// 获取整数
int value1 = QInputDialog::getInt(this, tr("输入整数对话框"),
tr("请输入-1000到1000之间的数值"), 100, -1000, 1000, 10, &ok);
if(ok) qDebug() << "value1:" << value1;
// 获取浮点数
double value2 = QInputDialog::getDouble(this, tr("输入浮点数对话框"),
tr("请输入-1000到1000之间的数值"), 0.00, -1000, 1000, 2, &ok);
if(ok) qDebug() << "value2:" << value2;
QStringList items;
items << tr("条目1") << tr("条目2");
// 获取条目
QString item = QInputDialog::getItem(this, tr("输入条目对话框"),
tr("请选择或输入一个条目"), items, 0, true, &ok);
if(ok) qDebug() << "item:" << item;
}
// 消息对话框
void MyWidget::on_pushButton_5_clicked()
{
// 问题对话框
int ret1 = QMessageBox::question(this, tr("问题对话框"),
tr("你了解Qt吗?"), QMessageBox::Yes, QMessageBox::No);
if(ret1 == QMessageBox::Yes) qDebug() << tr("问题!");
// 提示对话框
int ret2 = QMessageBox::information(this, tr("提示对话框"),
tr("这是Qt书籍!"), QMessageBox::Ok);
if(ret2 == QMessageBox::Ok) qDebug() << tr("提示!");
// 警告对话框
int ret3 = QMessageBox::warning(this, tr("警告对话框"),
tr("不能提前结束!"), QMessageBox::Abort);
if(ret3 == QMessageBox::Abort) qDebug() << tr("警告!");
// 错误对话框
int ret4 = QMessageBox::critical(this, tr("严重错误对话框"),
tr("发现一个严重错误!现在要关闭所有文件!"), QMessageBox::YesAll);
if(ret4 == QMessageBox::YesAll) qDebug() << tr("错误");
// 关于对话框
QMessageBox::about(this, tr("关于对话框"),
tr("123"));
}
// 进度对话框
void MyWidget::on_pushButton_6_clicked()
{
QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0, 50000, this);
dialog.setWindowTitle(tr("进度对话框")); // 设置窗口标题
dialog.setWindowModality(Qt::WindowModal); // 将对话框设置为模态
dialog.show();
for(int i=0; i<50000; i++) { // 演示复制进度
dialog.setValue(i); // 设置进度条的当前值
QCoreApplication::processEvents(); // 避免界面冻结
if(dialog.wasCanceled()) break; // 按下取消按钮则中断
}
dialog.setValue(50000); // 这样才能显示100%,因为for循环中少加了一个数
qDebug() << tr("复制结束!");
}
// 错误信息对话框
void MyWidget::on_pushButton_7_clicked()
{
errordlg->setWindowTitle(tr("错误信息对话框"));
errordlg->showMessage(tr("这里是出错信息!"));
}
QWizardPage * MyWidget::createPage1() // 向导页面1
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("介绍"));
return page;
}
QWizardPage * MyWidget::createPage2() // 向导页面2
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("用户选择信息"));
return page;
}
QWizardPage * MyWidget::createPage3() // 向导页面3
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("结束"));
return page;
}
// 向导对话框
void MyWidget::on_pushButton_8_clicked()
{
QWizard wizard(this);
wizard.setWindowTitle(tr("向导对话框"));
wizard.addPage(createPage1()); // 添加向导页面
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();
}
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
当然需要在ui.h文件中写入如下:
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
private:
Ui::MyWidget *ui;
QErrorMessage *errordlg;
QWizardPage *createPage1(); // 新添加
QWizardPage *createPage2(); // 新添加
QWizardPage *createPage3(); // 新添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

编辑 (opens new window)
上次更新: 2026/08/11, 13:36:18