跳转到内容

NToggleButton 切换按钮

介绍

切换按钮是一个可以在两种状态之间切换的按钮。NToggleButton 提供了现代化的外观、图标支持和丰富的自定义选项。

基本用法

cpp
// 创建切换按钮
NToggleButton* toggleBtn = new NToggleButton("启用");

// 设置初始状态
toggleBtn->setChecked(true);

// 监听状态变化
connect(toggleBtn, QOverload<bool>::of(&NToggleButton::toggled), [](bool checked) {
    qDebug() << "按钮状态:" << (checked ? "启用" : "禁用");
});

// 监听点击
connect(toggleBtn, QOverload<bool>::of(&NToggleButton::clicked), [](bool checked) {
    qDebug() << "按钮被点击,当前状态:" << checked;
});

带图标的切换按钮

cpp
// 创建切换按钮
NToggleButton* toggleBtn = new NToggleButton("通知");

// 设置图标
toggleBtn->setFluentIcon(NRegularIconType::Bell24Regular, 20);

// 设置初始状态
toggleBtn->setChecked(true);

// 监听状态变化
connect(toggleBtn, QOverload<bool>::of(&NToggleButton::toggled), [](bool checked) {
    qDebug() << "通知已" << (checked ? "启用" : "禁用");
});

功能开关

cpp
// 创建功能开关
NToggleButton* darkModeBtn = new NToggleButton("暗黑模式");
darkModeBtn->setFluentIcon(NRegularIconType::WeatherMoon24Regular, 18);

NToggleButton* soundBtn = new NToggleButton("声音");
soundBtn->setFluentIcon(NRegularIconType::Speaker224Regular, 18);

NToggleButton* vibrationBtn = new NToggleButton("振动");
vibrationBtn->setFluentIcon(NRegularIconType::PhoneVibrate24Regular, 18);

// 处理状态变化
connect(darkModeBtn, QOverload<bool>::of(&NToggleButton::toggled), [](bool checked) {
    qDebug() << "暗黑模式:" << (checked ? "开启" : "关闭");
});

connect(soundBtn, QOverload<bool>::of(&NToggleButton::toggled), [](bool checked) {
    qDebug() << "声音:" << (checked ? "开启" : "关闭");
});

connect(vibrationBtn, QOverload<bool>::of(&NToggleButton::toggled), [](bool checked) {
    qDebug() << "振动:" << (checked ? "开启" : "关闭");
});

切换状态

cpp
// 创建切换按钮
NToggleButton* toggleBtn = new NToggleButton("切换");

// 获取当前状态
bool isChecked = toggleBtn->isChecked();
qDebug() << "当前状态:" << isChecked;

// 设置状态
toggleBtn->setChecked(!isChecked);

// 切换状态
toggleBtn->toggle();

自定义文本

cpp
// 创建切换按钮
NToggleButton* toggleBtn = new NToggleButton();

// 设置文本
toggleBtn->setText("自定义文本");

// 获取文本
QString text = toggleBtn->text();
qDebug() << "按钮文本:" << text;

// 监听状态变化并更新文本
connect(toggleBtn, QOverload<bool>::of(&NToggleButton::toggled), [=](bool checked) {
    toggleBtn->setText(checked ? "已启用" : "已禁用");
});

自定义样式

cpp
// 创建切换按钮
NToggleButton* toggleBtn = new NToggleButton("样式");

// 设置圆角
toggleBtn->setBorderRadius(6);

// 自定义颜色
toggleBtn->setLightDefaultColor(QColor(240, 240, 240));
toggleBtn->setLightHoverColor(QColor(230, 230, 230));
toggleBtn->setLightPressColor(QColor(200, 200, 200));

toggleBtn->setLightTextDefaultColor(QColor(50, 50, 50));
toggleBtn->setLightTextPressColor(QColor(0, 0, 0));

toggleBtn->setLightBorderColor(QColor(200, 200, 200));

// 强调色
toggleBtn->setAccentDefaultColor(QColor(0, 120, 215));
toggleBtn->setAccentHoverColor(QColor(0, 140, 235));
toggleBtn->setAccentPressColor(QColor(0, 100, 195));
toggleBtn->setAccentTextColor(QColor(255, 255, 255));

// 暗黑主题
toggleBtn->setDarkDefaultColor(QColor(50, 50, 50));
toggleBtn->setDarkHoverColor(QColor(70, 70, 70));
toggleBtn->setDarkPressColor(QColor(100, 100, 100));

toggleBtn->setDarkTextDefaultColor(QColor(200, 200, 200));
toggleBtn->setDarkTextPressColor(QColor(255, 255, 255));

toggleBtn->setDarkBorderColor(QColor(80, 80, 80));

禁用状态

cpp
// 创建切换按钮
NToggleButton* toggleBtn = new NToggleButton("禁用示例");

// 禁用按钮
toggleBtn->setEnabled(false);

// 自定义禁用状态颜色
toggleBtn->setAccentDisabledColor(QColor(200, 200, 200));
toggleBtn->setAccentDisabledTextColor(QColor(150, 150, 150));

图标大小

cpp
// 创建切换按钮
NToggleButton* toggleBtn = new NToggleButton("图标");

// 设置图标
toggleBtn->setFluentIcon(NRegularIconType::Star24Regular);

// 设置图标大小
toggleBtn->setIconSize(QSize(24, 24));

// 获取图标大小
QSize iconSize = toggleBtn->iconSize();
qDebug() << "图标大小:" << iconSize.width() << "x" << iconSize.height();

按钮大小

cpp
// 创建切换按钮
NToggleButton* toggleBtn = new NToggleButton("大按钮");

// 设置最小大小
toggleBtn->setMinimumWidth(120);
toggleBtn->setMinimumHeight(40);

// 获取推荐大小
QSize sizeHint = toggleBtn->sizeHint();
qDebug() << "推荐大小:" << sizeHint.width() << "x" << sizeHint.height();

按钮组

cpp
// 创建按钮组
QWidget* buttonGroup = new QWidget();
QVBoxLayout* layout = new QVBoxLayout(buttonGroup);

// 创建多个切换按钮
NToggleButton* btn1 = new NToggleButton("选项1");
NToggleButton* btn2 = new NToggleButton("选项2");
NToggleButton* btn3 = new NToggleButton("选项3");

layout->addWidget(btn1);
layout->addWidget(btn2);
layout->addWidget(btn3);

// 互斥选择
connect(btn1, QOverload<bool>::of(&NToggleButton::toggled), [=](bool checked) {
    if (checked) {
        btn2->setChecked(false);
        btn3->setChecked(false);
    }
});

connect(btn2, QOverload<bool>::of(&NToggleButton::toggled), [=](bool checked) {
    if (checked) {
        btn1->setChecked(false);
        btn3->setChecked(false);
    }
});

connect(btn3, QOverload<bool>::of(&NToggleButton::toggled), [=](bool checked) {
    if (checked) {
        btn1->setChecked(false);
        btn2->setChecked(false);
    }
});

带图标的切换按钮组

cpp
// 创建按钮组
QWidget* buttonGroup = new QWidget();
QHBoxLayout* layout = new QHBoxLayout(buttonGroup);

// 创建带图标的切换按钮
NToggleButton* boldBtn = new NToggleButton("B");
boldBtn->setFluentIcon(NFilledIconType::TextBold24Filled, 16);

NToggleButton* italicBtn = new NToggleButton("I");
italicBtn->setFluentIcon(NFilledIconType::TextItalic24Filled, 16);

NToggleButton* underlineBtn = new NToggleButton("U");
underlineBtn->setFluentIcon(NFilledIconType::TextUnderline24Filled, 16);

layout->addWidget(boldBtn);
layout->addWidget(italicBtn);
layout->addWidget(underlineBtn);

// 处理状态变化
connect(boldBtn, QOverload<bool>::of(&NToggleButton::toggled), [](bool checked) {
    qDebug() << "加粗:" << (checked ? "启用" : "禁用");
});

connect(italicBtn, QOverload<bool>::of(&NToggleButton::toggled), [](bool checked) {
    qDebug() << "斜体:" << (checked ? "启用" : "禁用");
});

connect(underlineBtn, QOverload<bool>::of(&NToggleButton::toggled), [](bool checked) {
    qDebug() << "下划线:" << (checked ? "启用" : "禁用");
});

API

构造函数

构造函数说明
NToggleButton(QWidget* parent = nullptr)创建切换按钮
NToggleButton(const QString& text, QWidget* parent = nullptr)创建带文本的切换按钮

状态管理

方法说明参数/返回值
setChecked(bool checked)设置选中状态布尔值
isChecked()获取选中状态返回 bool
toggle()切换状态-

文本

方法说明参数/返回值
setText(const QString& text)设置按钮文本文本字符串
text()获取按钮文本返回 QString

图标

方法说明参数/返回值
setFluentIcon(NRegularIconType::Icon icon, int size, const QColor& color)设置 Fluent 图标-
setFluentIcon(NFilledIconType::Icon icon, int size, const QColor& color)设置填充 Fluent 图标-
icon()获取图标返回 QIcon
setIconSize(const QSize& size)设置图标大小大小对象
iconSize()获取图标大小返回 QSize

样式属性

属性说明类型
borderRadius边框圆角半径int

颜色属性

属性说明类型
lightDefaultColor明亮主题默认色QColor
darkDefaultColor暗黑主题默认色QColor
lightHoverColor明亮主题悬停色QColor
darkHoverColor暗黑主题悬停色QColor
lightPressColor明亮主题按下色QColor
darkPressColor暗黑主题按下色QColor
lightTextDefaultColor明亮主题文本色QColor
darkTextDefaultColor暗黑主题文本色QColor
lightTextPressColor明亮主题按下文本色QColor
darkTextPressColor暗黑主题按下文本色QColor
lightBorderColor明亮主题边框色QColor
darkBorderColor暗黑主题边框色QColor
accentDefaultColor强调色默认值QColor
accentHoverColor强调色悬停值QColor
accentPressColor强调色按下值QColor
accentDisabledColor强调色禁用值QColor
accentTextColor强调色文本色QColor
accentDisabledTextColor强调色禁用文本色QColor

大小

方法说明参数/返回值
sizeHint()获取推荐大小返回 QSize
minimumSizeHint()获取最小推荐大小返回 QSize

信号

信号说明参数
clicked(bool checked)按钮被点击当前选中状态
toggled(bool checked)状态已改变新的选中状态

主题定制

切换按钮会自动响应应用主题变化,支持明亮和暗黑主题的自动切换。

基于 LGPL-3.0 许可发布