Qt之按钮部件的理解使用与样式优化(QPushButtn、QToolButton、QRadioButton、QCheckBox、QCommandLinkButton、QDialogButtonBox)

1.QPushButton (通用按钮)

  用来给用户点击,来完成某种动作的控件,一般是矩形,一般作为登录按钮,注册按钮,关闭按钮
常用方法
 void setText(const QString &text) 设置按钮文本
 QString text() const 返回按钮上的文本
 void setIcon(const QIcon &icon) 设置按钮图表
 QIcon icon() const; 返回按钮图表
 void setMenu(QMenu* menu) 设置菜单
 void setFlat(bool); 设置按钮是否有边框,默认false表示有,true表示无
 void setCheckable(bool) 默认是false为触发式按钮,true为切换按钮(可以使用toggled(bool)信号)
 move(int x, int y) 指定按钮基于父窗口的位置
 void setDisabled(bool) 禁用按钮
 void setEnabled(bool) 可用按钮
信号槽:
1)信号
 pressed() 按钮按下时触发
 released() 按钮松开时触发
 clicked(bool checked = false) 按钮按下并松开后触发
 toggled(bool checked) 只有当切换按钮被按下时才会触发此信号
2)槽
 click() 单击按钮
 toggle() 单击切换按钮
 setIconSize(const QSize &size) 设置图表大小
 setChecked(bool) 设置按钮是否被选中
 setMenu(QMenu *menu) 设置菜单

样式css:
 hover \ pressed \ !enabled

2.QToolButton (图标按钮)

 通常在工具栏内部使用,一般不显示文本标签,只显示一个图标
常用方法:
 setIcon() //设置图标
 setToolButtonStyle(Qt::ToolButtonIconOnly)//设置只显示图标

3.QRadioButton (单选按钮)

 提供了一个带有文本标签的单选框(单选按钮
 使用 QButtonGroup 可以把一组 QRadioButton 控件进行统一管理,不要挨个设置信号槽的连接,同时可以拥有多组单选配置

4.QCheckBox (复选框)

 是一个选项按钮,可以打开(选中)或关闭(取消选中)。复选框中按钮的启用与禁止不会对其它按钮造成任何影响
 使用 QButtonGroup 可以把一组 QRadioButton 控件进行统一管理

5.QCommandLinkButton (命令链接按钮)

 作为向导和对话框中单选按钮的替代选项
 是个支持2行文字显示、缺省带箭头图标
 扁平化外观、内部功能与PushButton类似的按钮,其设计用于windows下替换页面上的next按钮

6.QDialogButtonBox

 一个包含很多按钮的控件,在对话框中有多个按钮需要分组排列的按钮时,可以使用QDialogButtongBox类
 可以通过standardbuttons设置
 4种信号,分别是accepted、rejected、clicked和helpRequested

代码:

widgetbuttons.h

#ifndef WIDGETBUTTONS_H
#define WIDGETBUTTONS_H

#include <QWidget>

namespace Ui {
class WidgetButtons;
}

class WidgetButtons : public QWidget
{
    Q_OBJECT

public:
    explicit WidgetButtons(QWidget *parent = nullptr);
    ~WidgetButtons();

    //QPushButton
    void initPushButton();

    //QToolButton
    void initToolButton();

    //QRadioButton
    void initRadioButton();

    //QCheckBox
    void initCheckBox();

    //QCommandLinkButton
    void initCommandLinkBtn();

    //QDialogButtongBox
    void initDialogButtonBox();

protected:
    void changeEvent(QEvent* event);

private:
    void retranslateUi();

private slots:
    //QToolButton
    void on_toolButton_left_clicked();
    void on_toolButton_right_clicked();

    //QRadioButton
    //单组简单方式可以直接用多个信号槽处理
    /*
    void on_radioButton_first_toggled(bool checked);
    void on_radioButton_sencond_toggled(bool checked);
    void on_radioButton_third_toggled(bool checked);
    */
    //QCommandLinkButton
    void on_commandLinkButton_clicked();

    //QCommandLinkButton
    void on_buttonBox_accepted();

    void on_buttonBox_rejected();

private:
    Ui::WidgetButtons *ui;
};

#endif // WIDGETBUTTONS_H

widgetbuttons.cpp

#include "widgetbuttons.h"
#include "ui_widgetbuttons.h"
#include <QAction>
#include "commondef.h"
#include <QMenu>
#include <QButtonGroup>

WidgetButtons::WidgetButtons(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::WidgetButtons)
{
    ui->setupUi(this);
    initPushButton();
    initToolButton();
    initRadioButton();
    initCheckBox();

    initCommandLinkBtn();

    retranslateUi();

}

WidgetButtons::~WidgetButtons()
{
    delete ui;
}

/*************************
 * QPushButton
 * ***********************/
void WidgetButtons::initPushButton()
{
    ui->Btn_Test->setText(tr("Test Button"));
    ui->Btn_Test->setIcon(QIcon(":/Resource/Image/WidgetButtons/icon_restart.png"));
    ui->Btn_Test->setIconSize(QSize(18,18));

    ui->Btn_Test2->setText(tr("Test Button2"));
    QMenu *menu = new QMenu();
    menu->addAction("AAA");
    menu->addAction("BBB");
    menu->addAction("CCC");
    ui->Btn_Test2->setMenu(menu);
    //绑定信号槽
    connect(ui->Btn_Test2, &QPushButton::pressed, ui->Btn_Test2, &QPushButton::hide);

}

/*************************
 * QToolButton
 * ***********************/
void WidgetButtons::initToolButton()
{
    //设置图标
    ui->toolButton_left->setIcon(QIcon(":/Resource/Image/WidgetButtons/left.png"));
    ui->toolButton_left->setIconSize(QSize(20, 20));
    ui->toolButton_left->setToolButtonStyle(Qt::ToolButtonIconOnly);
    //ui->toolButton_left->setText(tr("Back"));
    //设置提示
    ui->toolButton_left->setToolTip(tr("Back"));

    //设置图标
    ui->toolButton_right->setIcon(QIcon(":/Resource/Image/WidgetButtons/right.png"));
    //ui->toolButton_left->setText(tr("Forward"));
    ui->toolButton_right->setIconSize(QSize(20, 20));
    ui->toolButton_right->setToolButtonStyle(Qt::ToolButtonIconOnly);
    //设置提示
    ui->toolButton_right->setToolTip(tr("Forward"));
}

void WidgetButtons::on_toolButton_left_clicked()
{
    MY_DEBUG << "Back";
}

void WidgetButtons::on_toolButton_right_clicked()
{
    MY_DEBUG << "Forward";
}

/*************************
 * QRadioButton
 * ***********************/
void WidgetButtons::initRadioButton()
{
    QButtonGroup * pGroup = new QButtonGroup(this);
    pGroup->addButton(ui->radioButton_first, 0);
    pGroup->addButton(ui->radioButton_sencond, 1);
    pGroup->addButton(ui->radioButton_third, 2);

    pGroup->button(0)->setChecked(true);

    //设置互斥
    pGroup->setExclusive(true);

    //Toggled 信号
    connect(pGroup, static_cast<void(QButtonGroup::*)(int, bool)>(&QButtonGroup::buttonToggled), [&](int index, bool checked) {
        qDebug() << "Toggeld Index: " << index << "Status: " << checked;
    });

    //Clicked 信号
    connect(pGroup, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), [&](int index) {
        qDebug() << "Click Index: " << index  ;
    });

    MY_DEBUG << "First Radio Status:" << ui->radioButton_first->isChecked();
}

/*
void WidgetButtons::on_radioButton_first_toggled(bool checked)
{
    Q_UNUSED(checked)
    MY_DEBUG << "First";
}

void WidgetButtons::on_radioButton_sencond_toggled(bool checked)
{
    Q_UNUSED(checked)
    MY_DEBUG << "Second";
}

void WidgetButtons::on_radioButton_third_toggled(bool checked)
{
    Q_UNUSED(checked)
    MY_DEBUG << "Third";
}
*/

/*************************
 * QCheckBox
 * ***********************/
void WidgetButtons::initCheckBox()
{
    QButtonGroup * pGroup = new QButtonGroup(this);
    pGroup->addButton(ui->checkBox_first, 0);
    pGroup->addButton(ui->checkBox_second, 1);
    pGroup->addButton(ui->checkBox_third, 2);

    pGroup->setExclusive(false);  //允许多选

    pGroup->button(0)->setChecked(true);
    pGroup->button(1)->setChecked(true);

    MY_DEBUG << "First CheckBox Status:" << ui->checkBox_first->isChecked();
    MY_DEBUG << "Second CheckBox Status:" << ui->checkBox_second->isChecked();
}

/*************************
 * QCommandLinkButton
 * ***********************/
void WidgetButtons::initCommandLinkBtn()
{
    ui->commandLinkButton->setText(tr("Submit"));
    ui->commandLinkButton->setDescription(tr("To Submit Content"));
    //ui->commandLinkButton->setIcon(QIcon(":/Resource/Image/WidgetButtons/right.png"));
}

void WidgetButtons::on_commandLinkButton_clicked()
{
    MY_DEBUG << "CommandLinkButton Click";
}


void WidgetButtons::initDialogButtonBox()
{
}

/*************************
 * QDialogButtonBox
 * ***********************/
void WidgetButtons::on_buttonBox_accepted()
{
    MY_DEBUG << "accepted";
}

void WidgetButtons::on_buttonBox_rejected()
{
    MY_DEBUG << "rejected";
}

///

void WidgetButtons::changeEvent(QEvent *event)
{
    switch(event->type())
    {
        case QEvent::LanguageChange:
            retranslateUi();
            break;
        default:
            QWidget::changeEvent(event);
    }
}

void WidgetButtons::retranslateUi()
{
    ui->Btn_Test->setText(tr("Test"));
    ui->Btn_Test2->setText(tr("Test2"));
    ui->toolButton_left->setText(tr("Back"));
    ui->toolButton_right->setText(tr("Forward"));
    ui->radioButton_first->setText(tr("First"));
    ui->radioButton_sencond->setText(tr("Second"));
    ui->radioButton_third->setText(tr("Third"));
    ui->checkBox_first->setText(tr("First"));
    ui->checkBox_second->setText(tr("Second"));
    ui->checkBox_third->setText(tr("Third"));
    ui->commandLinkButton->setText(tr("Submit"));
    ui->commandLinkButton->setDescription(tr("To Submit Content"));

    //buttonbox的按钮翻译可以通过手动设置
    //ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("确定"));
    //ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("取消"));
}

样式优化

/*************************
 * Buttons
 * ***********************/
/*pushbutton*/
WidgetButtons QLabel
{
    color:white;
    font-size:18px;
}

WidgetButtons QPushButton#Btn_Test, QPushButton#Btn_Test2
{
    /*border-left:5px solid transparent;*/
    background-color:qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #05b183, stop:1 #056cbd);
    /*background-image:url(":Resource/Image/WidgetButtons/icon_restart.png");*/
    padding-left:22px;
    padding-right:10px;
    border-radius:4px;
    background-position:left;
    background-repeat:no-repeat;
    min-width:60px;
    min-height:30px;
    color:white;

}
WidgetButtons QPushButton#Btn_Test:pressed, QPushButton#Btn_Test2:pressed
{
     background-color:qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #02e293, stop:1 #0280e5);
}

WidgetButtons QPushButton#Btn_Test:hover, QPushButton#Btn_Test2:hover
{
    background-color:rgb(0,203,255);
    border-style:inset;
}

WidgetButtons QPushButton#Btn_Test:!enabled, QPushButton#Btn_Test2:!enabled
{
    background-color:grey;
    border-style:inset;
}

WidgetList QPushButton, WidgetTree QPushButton, WidgetTable QPushButton, WidgetContainers QPushButton,
WidgetDisplay QPushButton, WidgetUndoView QPushButton
{
    /*border-left:5px solid transparent;*/
    background-color:qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #05b183, stop:1 #056cbd);
    background-image:url(":Resource/Image/WidgetButtons/icon_restart.png");
    padding-left:22px;
    padding-right:10px;
    border-radius:4px;
    background-position:left;
    background-repeat:no-repeat;
    min-width:60px;
    min-height:30px;
    color:white;
}
WidgetList QPushButton:pressed, WidgetTree QPushButton:pressed, WidgetTable QPushButton:pressed,
WidgetContainers QPushButton:pressed, WidgetDisplay QPushButton:pressed, WidgetUndoView QPushButton:pressed
{
     background-color:qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #02e293, stop:1 #0280e5);
}

WidgetList QPushButton:hover,  WidgetTree QPushButton:hover, WidgetTable QPushButton:hover,
WidgetContainers QPushButton:hover, WidgetDisplay QPushButton:hover, WidgetUndoView QPushButton:hover
{
    background-color:rgb(0,203,255);
    border-style:inset;
}



/*toolbutton*/
QToolButton
{
    border: none;
    background: none;
    color: white;
}

QToolButton#toolButton_left:hover
{
    border-image:url(":/Resource/Image/WidgetButtons/left_h.png");
}

QToolButton#toolButton_right:hover
{
    border-image:url(":/Resource/Image/WidgetButtons/right_h.png");
}

/*QRadioButton*/
QRadioButton::unchecked
{
    color:white;
}
QRadioButton::checked
{
    color:#009cff;
}

QRadioButton::indicator
{
    width: 13px;
    height: 13px;
}
QRadioButton::indicator::unchecked
{
    image: url(":/Resource/Image/WidgetButtons/btn_radio.png");

}
QRadioButton::indicator::checked
{
    image: url(":/Resource/Image/WidgetButtons/btn_radio_checked.png");
}

/*QCheckBox*/
QCheckBox
{
    font-size:12px;
    color:white;
}
QCheckBox::indicator:unchecked
{
     image:url(:Resource/Image/WidgetButtons/checkbox_unselect.png);
}
QCheckBox::indicator:checked
{
     image:url(:Resource/Image/WidgetButtons/checkbox_select.png);
}

/*QCommandLinkButton*/

QCommandLinkButton#commandLinkButton
{
    color:white;
    padding-left:22px;
    padding-right:10px;
    border-radius:4px;
    background-color:qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #05b183, stop:1 #056cbd);
}

QCommandLinkButton#commandLinkButton:hover
{
    background-color:rgb(0,203,255);
    border-style:inset;
}

QCommandLinkButton#commandLinkButton:pressed
{
     background-color:qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #02e293, stop:1 #0280e5);
}

/*QDialogButtonBox*/
/*
QPushButton
{
    color:white;
    padding-left:22px;
    padding-right:10px;
    border-radius:4px;
    background-color:qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #05b183, stop:1 #056cbd);
}

QPushButton:hover
{
    background-color:rgb(0,203,255);
    border-style:inset;
}*/

实现效果:

在这里插入图片描述

工程路径下载:

https://download.csdn.net/download/linyibin_123/86512679

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用Qt的QSS(Qt Style Sheets)来为QToolButton生成可供选择的样式。下面是一个示例代码,演示如何使用QSS为QToolButton创建可供选择的样式: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建一个QToolButton QToolButton toolButton; toolButton.setText("Select Style"); // 设置QSS样式表 QString qss = R"( QToolButton { background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3); border-style: outset; border-width: 2px; border-color: beige; border-radius: 10px; padding: 6px; } QToolButton:hover { background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3); } QToolButton:pressed { background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 #D3D3D3, stop: 0.4 #D8D8D8, stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1); } )"; // 应用QSS样式表 toolButton.setStyleSheet(qss); // 显示窗口 QMainWindow mainWindow; mainWindow.setCentralWidget(&toolButton); mainWindow.show(); return app.exec(); } ``` 在上面的代码中,我们首先创建了一个QToolButton对象,并设置了其文本。然后,我们定义了一个QSS样式表,其中包含了QToolButton的各种样式属性。最后,我们使用`setStyleSheet`函数将样式表应用到QToolButton上。 您可以根据需要自定义QSS样式表,以实现您想要的效果。请注意,QSS样式表支持CSS语法,但也有一些特定的Qt扩展和属性可用。 希望这能帮到您,如果还有其他问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅笑一斤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值