💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《图像增强》
📝《模型优化》
📝《模型实战部署》
📝《图像配准融合》
📝《数据集》
📝《高效助手》
📝《C++》
📝《Qt》
目录
一、按钮QPushButton创建
在 C++ 和 Qt 中,可以使用 QPushButton 类来创建一个按钮。
1.1 QPushButton 类的使用方法
先使用帮助助手查看一下QPushButton 类的使用方法,见下:
1.2 添加按钮
使用代码添加按钮的方法有两种,见下:
第一种:
// 创建第一个按钮
QPushButton * btn = new QPushButton;
// 让btn对象,依赖在myWidget窗口中
btn->setParent(this); // 设置父亲
// 显示文本
btn->setText("第一个按钮"); // 输入的内容,char *自动转换为QString类型
第二种:
// 创建第二个按钮 按照控件的大小创建窗口
QPushButton * btn2 = new QPushButton("第二个按钮",this);
1.3 显示文本
1.3.1 中文文本显示
创建按钮后,可以通过 setText 方法动态修改按钮上的文本:
// 显示文本
button->setText("第一个按钮"); // 输入的内容,char *自动转换为QString类型
1.3.2 多语言显示
如果需要支持多语言,建议使用 QObject::tr() 包装文本:
button->setText(tr("Click Me"));
1.3.3 设置快捷键
通过在文本中添加 & 符号,可以为按钮添加快捷键。按下 Alt + 字母时按钮会被激活:
button->setText("&Click Me"); // 快捷键为 Alt + C
1.3.4 支持HTML格式
按钮文本支持简单的 HTML 格式,可以用来设置样式或超链接:
button->setText("<b><font color='blue'>Click Me</font></b>");
1.3.5 设置对齐方式
默认情况下,按钮文本是居中的,但可以通过样式表修改对齐方式:
button->setStyleSheet("text-align: left; padding-left: 10px;");
或者使用按钮的 QStyle:
button->setStyle(button->style());
1.3.6 设置图标和文本同时显示
按钮可以同时显示图标和文本,通过 setIcon 和 setText 配合使用:
button->setIcon(QIcon(":/icons/sample.png"));
button->setText("Click Me");
1.3.7 动态更新文本
可以通过按钮的 clicked 信号和槽机制实现动态更新按钮文本:
QObject::connect(button, &QPushButton::clicked, [button]() {
button->setText("You clicked me!");
});
1.3.8 示例代码
将上面显示文本的方式整合,下面是一个示例代码:
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton button("Click Me");
button.setText("Hello, Qt!");
button.setIcon(QIcon(":/icons/sample.png"));
button.setStyleSheet("font-size: 18px; color: white; background-color: green;");
button.show();
return app.exec();
}
1.4 按钮大小修改
在 Qt 中,可以通过以下几种方法修改按钮的大小(通常使用 QPushButton),从而调整它的宽度和高度。
1.4.1 使用 resize() 方法
resize() 方法可以直接设置按钮的宽度和高度:
button->resize(100, 50); // 设置按钮宽度为 100,高度为 50
1.4.2 使用 setFixedSize() 方法
如果希望按钮大小固定(不可拉伸),可以使用 setFixedSize():
button->setFixedSize(120, 60); // 宽 120,高 60
1.4.3 使用 setMinimumSize() 和 setMaximumSize()
通过设置最小和最大尺寸,可以定义按钮大小的范围:
button->setMinimumSize(80, 40); // 设置最小尺寸
button->setMaximumSize(200, 100); // 设置最大尺寸
1.4.4 使用布局管理器调整按钮大小
在使用布局(如 QHBoxLayout, QVBoxLayout)时,可以通过布局的 setStretch() 或按钮的 sizePolicy 控制按钮大小。
示例:
QVBoxLayout *layout = new QVBoxLayout(parent);
QPushButton *button = new QPushButton("Button", parent);
layout->addWidget(button);
button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); // 按钮随窗口拉伸
1.4.5 使用样式表(CSS)调整大小
可以通过样式表设置按钮的宽高:
button->setStyleSheet("width: 150px; height: 50px;");
1.4.6 设置初始大小并启用布局约束
如果按钮在窗体中,设置初始大小和布局约束的结合可以确保按钮大小合理:
button->setGeometry(10, 10, 100, 50); // 设置位置和大小
1.4.7 示例代码
下面是上面按钮大小修改代码整合的示例代码:
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
QPushButton *button1 = new QPushButton("Fixed Size");
button1->setFixedSize(120, 60);
QPushButton *button2 = new QPushButton("Minimum/Maximum Size");
button2->setMinimumSize(80, 40);
button2->setMaximumSize(200, 100);
QPushButton *button3 = new QPushButton("Expanding");
button3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QPushButton *button4 = new QPushButton("CSS Styled");
button4->setStyleSheet("width: 150px; height: 50px;");
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
window.show();
return app.exec();
}
运行结果:
button1 的大小固定。
button2 在允许范围内可调整大小。
button3 会随窗口扩展而拉伸。
button4 使用样式表设置大小。
1.5 按钮移动
在 Qt 中,可以通过以下几种方式移动按钮(如 QPushButton),改变其在父窗口中的位置。
1.5.1 使用 move() 方法
move() 方法设置按钮在父窗口中的位置,以像素为单位指定横坐标(x)和纵坐标(y):
button->move(100, 50); // 将按钮移动到 (100, 50) 的位置
1.5.2 使用 setGeometry() 方法
setGeometry() 同时设置按钮的位置和大小:
button->setGeometry(50, 30, 100, 50); // 将按钮移动到 (50, 30),并设置大小为 100x50
1.5.3 使用布局(推荐)
当使用布局(如 QHBoxLayout, QVBoxLayout 等)管理界面时,可以通过调整布局内的排列来控制按钮位置。这种方式避免了手动计算像素坐标,适合动态调整窗口大小的场景。
示例:
QVBoxLayout *layout = new QVBoxLayout(parent);
QPushButton *button = new QPushButton("Button", parent);
layout->addWidget(button); // 按钮由布局自动管理位置
1.5.4 使用父窗口坐标系统动态移动
如果需要动态控制按钮位置,例如在响应事件时,可以通过 move() 方法配合窗口的事件来实现:
示例:在按钮上点击鼠标时移动按钮。
connect(button, &QPushButton::clicked, [button]() {
button->move(button->x() + 10, button->y() + 10); // 每次点击按钮向右下移动 10 像素
});
1.5.5 示例代码
整合上面按钮移动的示例代码见下:
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
window.setFixedSize(400, 300);
// 使用 move() 方法
QPushButton *button1 = new QPushButton("Move", &window);
button1->move(50, 50);
// 使用 setGeometry() 方法
QPushButton *button2 = new QPushButton("Set Geometry", &window);
button2->setGeometry(150, 50, 100, 50);
// 使用布局管理
QVBoxLayout *layout = new QVBoxLayout(&window);
QPushButton *button3 = new QPushButton("Layout Managed");
layout->addWidget(button3);
window.show();
return app.exec();
}
二、窗口调整
在 Qt 中,可以通过设置窗口大小和窗口标题来自定义窗口外观。
2.1 设置窗口大小
2.1.1 setFixedSize()
设置窗口为固定大小,用户无法通过拖动边框调整窗口尺寸。
window->setFixedSize(800, 600); // 宽 800 像素,高 600 像素
2.1.2 resize()
设置窗口的初始大小,但允许用户通过拖动边框调整尺寸。
window->resize(800, 600);
2.1.3 setMinimumSize() 和 setMaximumSize()
设置窗口允许的最小和最大尺寸。
window->setMinimumSize(400, 300); // 最小尺寸
window->setMaximumSize(1200, 900); // 最大尺寸
2.2 设置窗口标题
2.2.1 固定设置标题
可以通过 setWindowTitle() 方法设置窗口标题:
window->setWindowTitle("My First Qt Application");
为了支持多语言环境,可以使用 tr() 包装字符串:
window->setWindowTitle(tr("My First Qt Application"));
示例代码见下:
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
window.setFixedSize(800, 600); // 设置固定大小
window.setWindowTitle("My Qt Window"); // 设置标题
window.show();
return app.exec();
}
2.2.2 动态设置标题
可以根据事件动态修改窗口标题。例如,窗口获得焦点时改变标题:
connect(&window, &QWidget::windowTitleChanged, [](const QString &newTitle) {
qDebug() << "Window title changed to:" << newTitle;
});
window.setWindowTitle("New Title");
2.2.3 补充
如果同时调用 setFixedSize() 和 resize(),以最后调用的方法为准。
动态调整窗口大小时,请确保控件布局适配新尺寸,推荐使用布局管理器。
标题设置支持 Unicode,可以直接输入中文或其他语言字符:
window.setWindowTitle("你好,Qt!");
三、按钮中文显示设置
有些情况下,显示中文按钮可能会出现乱码,解决办法只需将默认编码设置为UTF-8,设置步骤见下:
四、Qt中自动保存设置
Qt中设置自动保存编辑过的代码,设置步骤见下:
五、代码及效果展示
5.1 代码
结合上面相关按钮的功能介绍,下面是在源文件中mywidget.cpp脚本中添加按钮和窗口设置相关代码,代码见下:
#include "mywidget.h" // 引入 mywidget.h 头文件,用于提供 myWidget 类的声明和依赖。
#include "ui_mywidget.h" // 引入 ui_mywidget.h 文件,该文件由 Qt 的 UIC 工具(用户界面编译器)根据 mywidget.ui 文件自动生成,负责定义用户界面相关的类和方法。
#include <QPushButton> // 将QPushButton的头文件引入
#include "mypushbutton.h" // 自己定义的按钮
#include <QDebug>
myWidget::myWidget(QWidget *parent) // 定义 myWidget 类的构造函数。参数 parent 是指针类型,指向父窗口(若为空,则表示没有父窗口)。
: QWidget(parent) // 初始化,调用QWidget(父类)的构造函数,把parent传进去。Qt 中父子关系用于管理窗口层级和资源释放,子窗口随父窗口一起销毁。
, ui(new Ui::myWidget) // 初始化 ui 成员变量。ui 是一个指针,指向自动生成的 Ui::myWidget 类,用于操作界面组件
{
ui->setupUi(this); // 调用 setupUi 方法,为当前窗口(this)设置用户界面。setupUi 方法会将 mywidget.ui 文件中定义的界面布局、控件等加载到当前窗口。
// 创建第一个按钮
QPushButton * btn = new QPushButton;
// btn->show(); show以顶层方式弹出窗口控件
// 让btn对象,依赖在myWidget窗口中
btn->setParent(this); // 设置父亲
// 显示文本
btn->setText("第一个按钮"); // 输入的内容,char *自动转换为QString类型
// 创建第二个按钮 按照控件的大小创建窗口
QPushButton * btn2 = new QPushButton("第二个按钮",this);
// 修改第二个按钮的大小
btn2->resize(200,50);
// 移动btn2按钮
btn2->move(100,100);
// 重置窗口大小
resize(600,400); // 窗口的宽和高
// 设置固定窗口大小,设置为固定后,后期使用不能随意拖拽窗口放大或缩小
setFixedSize(600,400);
// 设置窗口标题
setWindowTitle("窗口显示");
// 创建一个自己的按钮对象
MyPushButton * myBtn = new MyPushButton;
myBtn->setText("我自己的按钮");
myBtn->move(200,0);
myBtn->setParent(this); // 设置父亲 设置到对象树中
}
myWidget::~myWidget() // 定义 myWidget 类的析构函数,在对象销毁时自动调用。
{
qDebug() << "mywidget的析构调用";
delete ui; // 释放 ui 指针所指向的内存。确保在窗口销毁时,ui 对象(及其管理的界面控件)被正确释放,避免内存泄漏。
}
5.2 运行结果
运行结果见下:
六、自定义按钮
在上面第五章节中,可以看到有一个“我自己的按钮”,添加方法见下:
6.1 源文件和头文件创建
先新建一个.cpp源文件:
通过上面步骤创建好后的样子,见下:
6.2 代码
6.2.1 头文件
mypushbutton.h头文件中代码见下:
#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H
// #include <QWidget>
#include <QPushButton>
// class MyPushButton : public QWidget
class MyPushButton : public QPushButton
{
Q_OBJECT
public:
explicit MyPushButton(QWidget *parent = nullptr);
// MyPushButton(); // 构造函数
~MyPushButton(); // 析构函数
signals:
};
#endif // MYPUSHBUTTON_H
6.2.2 源文件
mypushbutton.cpp源文件中代码见下:
#include "mypushbutton.h"
#include <QDebug>
MyPushButton::MyPushButton(QWidget *parent)
// : QWidget{parent}
: QPushButton{parent}
{
qDebug() << "我的按钮类构造调用";
}
MyPushButton::~MyPushButton()
{
qDebug() << "我的按钮类析构";
}
6.2.3 引入自己创建的按钮
将自己定义好的mypushbutton.h头文件引入,见下:
在mywidget.cpp脚本中添加代码,见下:
添加完后,运行代码,效果就是上面5.2中展示结果。
七、总计
以上就是Qt中使用QPushButton创建按钮,窗口调整的详细图文教程,希望能帮到你!
感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖
关注下面「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!