QT学习07:五种按钮控件

文章首发于我的个人博客:欢迎大佬们来逛逛
完整Qt学习项目地址:源码地址

抽象类:QAbstractButton

是所有按钮类的祖先。请添加图片描述

QAbstractButton的信号

  • void clicked(bool checked = false) : 是否选中按钮
  • void pressed(): 点击按钮
  • void released(): 释放按钮
  • void toggled(bool checked): 检测是否被选中

QPushButton

最常用的按钮控件之一。

构造函数:

设置图标,文本信息,父窗口

QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)
QPushButton(const QString &text, QWidget *parent = nullptr)
QPushButton(QWidget *parent = nullptr)

它继承自抽象按钮类:QAbstractButton

常用操作:

  1. setCheckable:设置按钮被选中(默认不会被选中),如果被选中则会触发 toggled 信号,但是不会触发**clicked**,它只有在点击时才会触发。
  2. setFlat:设置按钮扁平化
  3. setMenu:为按钮添加菜单
  4. setIconsetShortcutsetText:设置图片,快捷键,文本等

示例:

void Widget::testPushButton()
{
    auto btn=new QPushButton(style()->standardPixmap(QStyle::SP_DialogCloseButton),"干我",this);

    auto menu=new QMenu(this);
    menu->addMenu("唱跳");
    menu->addMenu("RAP");
    menu->addMenu("篮球");

    //添加按钮菜单
    //btn->setMenu(menu);

    //设置按钮扁平化
    btn->setFlat(true);

    //设置能被选中
    btn->setCheckable(true);

    //检测是否被选中
    connect(btn,&QPushButton::toggled,this,[=](bool checked){qInfo()<<"toggled"<<checked;});
}

QToolButton

工具按钮,用于显示菜单上的小工具等。

请添加图片描述

构造函数:

QToolButton(QWidget *parent = nullptr)

同样继承自抽象按钮类:QAbstractButton

常用操作:

  1. 具有上面的QPushButton介绍的所有常用操作。
  2. setToolButtonStyle:设置图标后指定文字和图片的位置,来自Qt::ToolButtonStyle
  3. setAutoRaise:设置按钮的点击动态效果
  4. setArrowType:设置此按钮为箭头而不是图标

示例:

void Widget::testToolButton()
{
    auto btn=new QToolButton(this);
    btn->setText("ToolButton");
    btn->setIcon(style()->standardPixmap(QStyle::SP_ComputerIcon));
    //设置文字与图标显示位置
    btn->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextUnderIcon);

    //btn->setArrowType(Qt::ArrowType::RightArrow); //展现为箭头
    auto menu=new QMenu(this);
    menu->addMenu("唱跳");
    menu->addMenu("RAP");
    menu->addMenu("篮球");
    btn->setMenu(menu);

    //设置按钮菜单弹出模式
    btn->setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup);
    //设置按钮点击动态效果
    btn->setAutoRaise(true);

}

QCommandLinkButton

此按钮用于命令行链接(进入某链接的按钮

请添加图片描述

构造函数:

QCommandLinkButton(const QString &text, const QString &description, QWidget *parent = nullptr)
QCommandLinkButton(const QString &text, QWidget *parent = nullptr)
QCommandLinkButton(QWidget *parent = nullptr)

它继承自:QPushButton

常用操作:

  1. 具有父类的所有操作
  2. setDescription:专属的操作,可以设置描述文本
void Widget::testCommandLinkButton()
{
    auto btn=new QCommandLinkButton("Github",this);
    btn->setDescription("点击跳转到Github");
    connect(btn,&QCommandLinkButton::clicked,this,[](){
        qInfo()<<"正在打开!";
    });
}

QRadioButton

单选框按钮

请添加图片描述

构造函数:

QRadioButton(const QString &text, QWidget *parent = nullptr) 
QRadioButton(QWidget *parent = nullptr)

同样继承自:QAbstractButton

常用操作:

  1. 参见上面的QPushButton。

示例:

void Widget::testRadioButton(){
    auto btn1=new QRadioButton("男",this);
    auto btn2=new QRadioButton("女",this);
    btn2->move(0,35); 
    btn1->setIcon(QIcon("loginIcon.png"));
}

QCheckBox

复选框,用于多选

https://i-blog.csdnimg.cn/blog_migrate/d7b5b134c28a399fe7d39873b94f4a56.png

构造函数:

QCheckBox(const QString &text, QWidget *parent = nullptr)
QCheckBox(QWidget *parent = nullptr)

复选框具有以下三种状态:(三态模式)

  1. Qt::check: 选中
  2. Qt::Uncheck:未选中
  3. Qt::PartiallyChecked:部分选中

特别操作:

  1. setExclusive:设置为不排斥状态,即可以多选,因为这个QCheckBox默认是排斥的,需要手动设置以下。

信号:

 void stateChanged(int state):当复选框的状态发生改变
void Widget::testcheckButton(){
    auto btn1=new QCheckBox("打篮球",this);
    auto btn2=new QCheckBox("唱",this);
    auto btn3=new QCheckBox("跳",this);
    btn2->move(0,35);
    btn3->move(0,70);
    btn1->setIcon(QIcon("loginIcon.png"));
    //设置三态    
		btn1->setTristate(true); 
    connect(btn1,&QCheckBox::toggled,this,[=](bool check){qInfo()<<check;});
    connect(btn1,&QCheckBox::stateChanged,this,[](int state){
				qInfo()<<Qt::CheckState(state);    
		});}

QButtonGroup

按钮管理类,可以将所有的按钮放入此类中进行统一管理 它具有每一个按钮的id,以便能够根据id管理每一个按钮。

请添加图片描述

构造函数:

QButtonGroup::QButtonGroup(QObject *parent = nullptr)

继承自:QObject

常用操作:

  1. buttons:获取该组中的所有按钮,返回的是一个QList
  2. id:获得编号为id的按钮
  3. setId:设置按钮编号
  4. addButton:添加按钮并且设置它在该组中编号
void Widget::testButtonGroup()
{
    auto btnSexGroup=new QButtonGroup(this);
    //性别组
    btnSexGroup->addButton(new QRadioButton("男",this),0);
    btnSexGroup->addButton(new QRadioButton("女",this),1);
    btnSexGroup->addButton(new QRadioButton("人妖",this),2);
    btnSexGroup->addButton(new QRadioButton("日本人",this),3);
    auto sexLists=btnSexGroup->buttons(); //获取按钮的所有按钮
    for (int i=0;i<sexLists.size();i++){
        btnSexGroup->button(i)->move(0,i*35);
    }

    //收入组
    auto btnIncomeGroup=new QButtonGroup(this);
    btnIncomeGroup->addButton(new QRadioButton("5k-1w",this),0);
    btnIncomeGroup->addButton(new QRadioButton("1w-2w",this),1);
    btnIncomeGroup->addButton(new QRadioButton("2w-5w",this),2);
    btnIncomeGroup->addButton(new QRadioButton("5w-10w",this),3);
    auto incomeLists=btnSexGroup->buttons(); //获取按钮的所有按钮
    for (int i=0;i<incomeLists.size();i++){
        btnIncomeGroup->button(i)->move(150,i*35);
    }

    //你喜欢的偶像
    auto btnYourLove=new QButtonGroup(this);
    btnYourLove->addButton(new QCheckBox("蔡徐坤",this),0);
    btnYourLove->addButton(new QCheckBox("陈立农",this),1);
    btnYourLove->addButton(new QCheckBox("范丞丞",this),2);
    btnYourLove->addButton(new QCheckBox("王源",this),3);
    btnYourLove->addButton(new QCheckBox("易烊千玺",this),4);
    auto loveLists=btnYourLove->buttons(); //获取按钮的所有按钮
    for (int i=0;i<loveLists.size();i++){
        btnYourLove->button(i)->move(300,i*35);
    }
    //多选按钮默认是排斥的
    qInfo()<<btnYourLove->exclusive(); //true
    btnYourLove->setExclusive(false); //设置不排斥
}
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yuleo_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值