第五篇:其他窗口部件 QAbstractButton

QAbstractButton

QAbstractButton 类是按钮部件的抽象基类,提供了按钮的通用功能。它的子类包括标准按钮 QPushButton、工具按钮 QToolButton、复选框 QCheckBox和单选按钮 QRadioButton 等。

QPushButton

QPushButton 提供了创建交互按钮的基本功能。它可以包含文本、图标等,并能够发射各种信号,使得开发者可以轻松地实现按钮的交互行为。

#include <QApplication>
#include <QPushButton>
#include <QMessageBox>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton btn;
    
    // 设置文本
    btn.setText("按钮");
    btn.show();
    
    // 连接信号槽点击后弹出对话框
    QObject::connect(&btn, &QPushButton::clicked, []() {
        QMessageBox::information(nullptr, "Clicked", "button clicked!");
    });

    return a.exec();
}

在这里插入图片描述

QToolButton

QToolButton 是一种特殊的按钮,可以快速访问特定的命令或选项。与普通的命令按钮不同,工具按钮通常不显示文本标签(不代表不能),而是显示图标。当使用 QToolBar::addAction() 创建新的 QAction 实例或使用 QToolBar::addActions() 将现有操作添加到工具栏时,通常使用 QToolButton。

#include <QApplication>
#include <QHBoxLayout>
#include <QToolButton>
#include <QMenu>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget w;

    QToolButton btn1;
    // 设置箭头类型
    btn1.setArrowType(Qt::DownArrow);
    // 设置按钮是否自动突出,默认为 false
    btn1.setAutoRaise(true);

    QToolButton btn2;
    btn2.setArrowType(Qt::LeftArrow);

    QToolButton btn3;
    // 设置文本
    btn3.setText("查看");
    // 设置图标
    btn3.setIcon(QIcon("C:\\Users\\yxc\\Pictures\\Camera Roll\\discord_midjourney_9_.png"));
    // 设置样式
    btn3.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

    QToolButton btn4;
    // 设置菜单弹出方式(默认QToolButton::DelayedPopup按一会再弹出)
    btn4.setPopupMode(QToolButton::InstantPopup);
    // 添加菜单
    QMenu menu;
    menu.addAction("剪切");
    menu.addAction("粘贴");
    menu.addAction("复制");
    btn4.setMenu(&menu);

    QHBoxLayout layout;
    layout.addWidget(&btn1);
    layout.addWidget(&btn2);
    layout.addWidget(&btn3);
    layout.addWidget(&btn4);

    w.setLayout(&layout);
    w.show();

    return a.exec();
}

在这里插入图片描述

QToolButton 的样式:

常量描述
Qt::ToolButtonIconOnly只显示图标
Qt::ToolButtonTextOnly只显示文本
Qt::ToolButtonTextBesideIcon文本显示在图标旁边
Qt::ToolButtonTextUnderIcon文本显示在图标下方
Qt::ToolButtonFollowStyle根据QStyle::StyleHint格式显示

QCheckBox

QCheckBox 是一个选项按钮,可以打开(选中)或关闭(未选中)。如果复选框被选中,再次点击这个按钮选中状态会被取消。。复选框通常会向用户提供“多选多”的选择。然而复选框也可以实现“多选一”。例如:QButtonGroup可用于对复选按钮进行逻辑分组(QButtonGroup不提供任何视觉表示),从而允许使用独占复选框。

下图进一步说明了独占和非独占复选框之间的区别(将两种复选框放在了两个QGroupBox容器中):

在这里插入图片描述

实现独占需要设置 autoExclusive 属性为 true。

在这里插入图片描述

Qt::CheckState类型:

常量描述
Qt::Unchecked未选中
Qt::PartiallyChecked半选中
Qt::Checked选中

QCheckBox 默认是两种选中状态,选中和未选中,setTristate(true)用来开启半选中状态。

#include <QApplication>
#include <QWidget>
#include <QCheckBox>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget w;

    // 垂直布局(暂时先使用,后面会仔细学习)
    QVBoxLayout layout(&w);

    // 添加复选框
    QCheckBox chkBox1;
    chkBox1.setText("语文");

    QCheckBox chkBox2;
    chkBox2.setText("数学");
    chkBox2.setChecked(true);

    QCheckBox chkBox3;
    chkBox3.setText("英语");
    chkBox3.setTristate(true);
    chkBox3.setCheckState(Qt::PartiallyChecked);

    layout.addWidget(&chkBox1);
    layout.addWidget(&chkBox2);
    layout.addWidget(&chkBox3);

    w.show();

    return a.exec();
}

在这里插入图片描述

QRadioButton

QRadioButton 是一个选项按钮,可以打开(选中)或关闭(未选中)。单选按钮通常会向用户提供“多选一”的选择。如果用户选择了另一个按钮,则先前选择的按钮将关闭。如果单选按钮被选中,再次点击这个按钮选中状态是不能被取消的。这是与 QCheckBox 的不同点

#include <QApplication>

#include "widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Widget w;
    w.show();

    return a.exec();
}

在这里插入图片描述

运行结果如图所示:

在这里插入图片描述

如果我们使用鼠标点击了某个单选按钮,其他按钮将取消选中。

<think>好的,我现在需要帮助用户为他们的C++函数添加Doxygen注释。用户给出的函数是voidAAAAADialog::onButtonToggled(QAbstractButton*button,bool checked),功能是根据按钮的状态将文本添加或移除到checkedBoxes列表中。首先,我得回忆一下Doxygen的注释格式。通常,Doxygen使用/**... */这样的块注释,并且每个参数用@param,函数描述用@brief,返回值用@return等标签。不过这个函数是void返回类型,所以可能不需要@return。接下来,我需要理解这个函数的功能。根据用户描述,当按钮状态变化时,函数会根据checked的值,将按钮的文本添加到checkedBoxes列表或从中移除。所以注释需要说明这一点。然后,考虑参数部分。第一个参数是QAbstractButton*button,这是触发事件的按钮对象;第二个是bool checked,表示按钮的新状态。在Doxygen中,每个参数都应该用@param注明。可能还需要注意一些细节,比如函数属于哪个类(AAAAADialog),但Doxygen会自动关联,所以注释里可能不需要特别说明。不过如果有特殊作用,可以提到。用户可能希望注释清晰说明函数的作用、参数的意义,以及副作用,比如修改checkedBoxes列表。此外,是否需要@note或@warning之类的标签?比如,如果button的文本为空可能会有问题,但用户没提到,可能不需要假设。 然后,检查示例格式是否正确。确保使用正确的Doxygen语法,比如参数名正确,注释块正确闭合。还要注意中英文的问题,用户要求用中文回答,所以注释内容应该用中文。最后,生成相关问题。考虑用户可能进一步想知道如何生成文档,常用标签,或者如何处理重载函数的注释等。需要确保问题相关且有帮助。总结步骤: 1.编写函数功能的简要描述。 2.用@param解释每个参数。3.说明函数如何修改checkedBoxes列表。4.使用正确的Doxygen注释格式。5.生成相关问题,如Doxygen的使用方法、参数说明技巧等。</think>以下是为该C++函数添加Doxygen注释的示例: ```cpp /** * @brief 根据按钮状态更新选中复选框列表 * * 当按钮的选中状态发生变化时,将其文本内容添加到checkedBoxes列表或从列表中移除。 * 函数通过checked参数判断当前是选中还是取消选中状态。 * * @param button 触发状态变化的按钮对象指针 * @param checked 按钮新的选中状态(true=选中,false=未选中) */ void AAAAADialog::onButtonToggled(QAbstractButton* button, bool checked) { // 函数实现代码... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值