1.Push Button:命令按钮
- 功能:它是Qt中最常见的一个按钮,一般拿来跟槽函数进行连接,触发某种命令和操作
- 外观:通常是矩阵
- 示例代码(当我们需要一个项目,它使用两个QPushButton来改变窗口的背景时):
1.1、基础特性
-
继承关系
QPushButton继承自QAbstractButton,而QAbstractButton又继承自QWidget12。它支持文本、图标、快捷键等基础功能。 -
构造函数
QPushButton(parent)
QPushButton(text, parent)
QPushButton(icon, text, parent)
支持同时设置图标和文字,例如:QPushButton(QIcon("icon.png"), "提交")
1.2、核心功能
-
常用属性
属性 描述 text
按钮显示的文字,可通过 setText()
修改icon
左侧图标,支持 setIcon(QIcon)
设置enabled
是否启用按钮,禁用时无法点击( setEnabled(False)
)flat
是否隐藏边框( setFlat(True)
)autoDefault
在对话框中按Enter键是否自动触发(默认true) -
布局控制
- 调整位置:
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中用于快速访问命令或选项的按钮控件,继承自QAbstractButton
7,通常出现在工具栏(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