Qt中使用QPushButton创建按钮、自定义按钮、显示文本、按钮大小修改、按钮移动和窗口调整(详细图文教程)

在这里插入图片描述

💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《图像增强》
📝《模型优化》
📝《模型实战部署》
📝《图像配准融合》
📝《数据集》
📝《高效助手》
📝《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创建按钮,窗口调整的详细图文教程,希望能帮到你!

感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖

关注下面「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视觉研坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值