Bootstrap

Qt常用按钮组(Buttons)的学习

1.Push Button:命令按钮

  • 功能:它是Qt中最常见的一个按钮,一般拿来跟槽函数进行连接,触发某种命令和操作
  • 外观:通常是矩阵
  • 示例代码(当我们需要一个项目,它使用两个QPushButton来改变窗口的背景时):

1.1、基础特性

  1. 继承关系
    QPushButton继承自QAbstractButton,而QAbstractButton又继承自QWidget12。它支持文本、图标、快捷键等基础功能。

  2. 构造函数

    • QPushButton(parent)
    • QPushButton(text, parent)
    • QPushButton(icon, text, parent)
      支持同时设置图标和文字,例如:QPushButton(QIcon("icon.png"), "提交")

1.2、核心功能

  1. 常用属性

    属性描述
    text按钮显示的文字,可通过setText()修改
    icon左侧图标,支持setIcon(QIcon)设置
    enabled是否启用按钮,禁用时无法点击(setEnabled(False)
    flat是否隐藏边框(setFlat(True)
    autoDefault在对话框中按Enter键是否自动触发(默认true)
  2. 布局控制

    • 调整位置:move(x, y)
    • 调整尺寸:resize(w, h) 或 setGeometry(x, y, w, h)

QPushButton项目描述:

当我们按下命令按钮1时,窗口的背景会变成黄色,而当我们按下命令按钮2时,窗口的背景则是变成了红色。

项目结构:

mainwindow.h代码结构如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QPushButton *pb1, *pb2;     // 定义两个QPushButton对象

private slots:
    // 声明pushbutton1_clicked()函数和另一个函数
    void pushbutton1_clicked();
    void pushbutton2_clicked();
};
#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    // 设置窗口的界面
    this->setGeometry(0, 0, 500, 300);

    // 实例化两个命令按钮对象
    pb1 = new QPushButton("命令按钮1", this);   // this用于指定父对象,也就是这个MainWindow
    pb2 = new QPushButton("命令按钮2", this);   // 同理

    // 设置两个QPushButton按钮的位置和大小
    pb1->setGeometry(20, 20, 150, 50);
    pb2->setGeometry(20, 90, 150, 50);

    // 与信号槽进行连接
    /*
     * pb1:

    信号的发送者,表示 QPushButton 对象。
    当用户点击按钮时,pb1 会发出 clicked() 信号。
    SIGNAL(clicked()):

    clicked() 是 QPushButton 的一个内置信号。
    这个信号会在按钮被点击时自动发出。
    this:

    信号的接收者,这里是当前窗口对象(一般是继承自 QWidget 或 QMainWindow 的类)。
    SLOT(pushbutton_clicked()):

    槽函数的名字。这里表示,当信号 clicked() 被发出时,系统会调用 pushbutton_clicked() 函数。
    */
    connect(pb1, SIGNAL(clicked()), this, SLOT(pushbutton1_clicked()));
    connect(pb2, SIGNAL(clicked()), this, SLOT(pushbutton2_clicked()));

}

MainWindow::~MainWindow()
{
}

// 对前面生成的函数进行定义
void MainWindow::pushbutton1_clicked(){
    this->setStyleSheet("QMainWindow {background-color:rgba(255, 255, 0, 100%);}"); // 100%表示完全不透明

}

void MainWindow::pushbutton2_clicked(){
    this->setStyleSheet("QMainWindow {background-color:rgba(255, 0, 0, 100%);}"); // 100%表示完全不透明
}

结果如下:

2. Tool Button(工具按钮)

功能:用作工具栏中的按钮,通常用于快速执行某些常见操作。

2.1、QToolButton概述

QToolButton是Qt中用于快速访问命令或选项的按钮控件,继承自QAbstractButton7,通常出现在工具栏(QToolBar)中。与QPushButton相比,它更注重简洁的图标展示,支持文本与图标组合,适用于辅助操作而非主要命令触发

2.2、核心功能特性

1. 弹出菜单模式

通过setPopupMode()设置菜单弹出行为:

  • DelayedPopup(默认):长按按钮后弹出菜单(如浏览器后退按钮)。
  • MenuButtonPopup:按钮分为主区域和箭头区域,点击箭头弹出菜单。
  • InstantPopup:点击立即弹出菜单,且不触发按钮自身动作。
2. 工具按钮样式

通过setToolButtonStyle()设置显示风格:

  • 仅图标ToolButtonIconOnly,默认)
  • 仅文本ToolButtonTextOnly
  • 文本在图标旁/下方TextBesideIcon/TextUnderIcon)
    (用户代码中使用了TextUnderIcon样式)
3. 自动浮起效果

在工具栏中默认启用autoRaise属性:

  • 鼠标悬停时显示3D边框,提升交互反馈。
4. 箭头类型

通过setArrowType()可替换图标为方向箭头(如上下左右),适用于折叠面板等场景。


三、与QAction的集成

  • 绑定默认动作:通过setDefaultAction(QAction*)将按钮与QAction关联,自动同步图标、文本、提示等属性。
  • 信号机制:支持clicked()(点击触发)和triggered(QAction*)(菜单项触发)信号。

接下来,我们写一个QToolButton的项目

QToolButton项目的结构如下:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

// 1:
#include <QToolBar> // 引入QToolBar类
#include <QToolButton> // 引入QToolButton类


class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    // 2:声明一个QToolButton对象和QToolBar对象
    QToolBar *tbar;
    QToolButton *tbutton;

};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include <QApplication>
#include <QStyle>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //3: 设置窗口运行位置
    this->setGeometry(300,150,500,300);

    //4: 将QToolBar对象进行实例化
    tbar=new QToolBar(this);
    tbar->setGeometry(20,20,200,50);

    //5: 将QStyle类对象进行实例化,主要目的设置风格,图标是系统自带
    QStyle *sty=QApplication::style();
    QIcon ico=sty->standardIcon(QStyle::SP_TitleBarContextHelpButton);

    //6: 将QToolButton对象进行实例化
    tbutton=new QToolButton();
    tbutton->setIcon(ico);

    tbutton->setText("系统帮助提示"); // 设置将要显示文本

    // 调用setToolButtonStyle函数设置tbutton样式,设置文本在图标下方
    tbutton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

    // 将tbutton添加到tbar里面
    tbar->addWidget(tbutton);




}

MainWindow::~MainWindow()
{
}

项目结果如下:

总结:QToolButton与QPushButton的区别

最后向大家推荐一个学习网站:
0voice · GitHub