文章首发于我的个人博客:欢迎大佬们来逛逛 完整Qt学习项目地址:源码地址
文章目录
抽象类:QAbstractButtonQPushButtonQToolButtonQCommandLinkButtonQRadioButtonQCheckBoxQButtonGroup
抽象类: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
常用操作:
setCheckable:设置按钮被选中(默认不会被选中),如果被选中则会触发 toggled 信号,但是不会触发**clicked**,它只有在点击时才会触发。setFlat:设置按钮扁平化setMenu:为按钮添加菜单setIcon,setShortcut,setText:设置图片,快捷键,文本等
示例:
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"< } QToolButton 工具按钮,用于显示菜单上的小工具等。 构造函数: QToolButton(QWidget *parent = nullptr) 同样继承自抽象按钮类:QAbstractButton 常用操作: 具有上面的QPushButton介绍的所有常用操作。setToolButtonStyle:设置图标后指定文字和图片的位置,来自Qt::ToolButtonStylesetAutoRaise:设置按钮的点击动态效果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 常用操作: 具有父类的所有操作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 常用操作: 参见上面的QPushButton。 示例: void Widget::testRadioButton(){ auto btn1=new QRadioButton("男",this); auto btn2=new QRadioButton("女",this); btn2->move(0,35); btn1->setIcon(QIcon("loginIcon.png")); } QCheckBox 复选框,用于多选 构造函数: QCheckBox(const QString &text, QWidget *parent = nullptr) QCheckBox(QWidget *parent = nullptr) 复选框具有以下三种状态:(三态模式) Qt::check: 选中Qt::Uncheck:未选中Qt::PartiallyChecked:部分选中 特别操作: 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()< connect(btn1,&QCheckBox::stateChanged,this,[](int state){ qInfo()< });} QButtonGroup 按钮管理类,可以将所有的按钮放入此类中进行统一管理 它具有每一个按钮的id,以便能够根据id管理每一个按钮。 构造函数: QButtonGroup::QButtonGroup(QObject *parent = nullptr) 继承自:QObject 常用操作: buttons:获取该组中的所有按钮,返回的是一个QListid:获得编号为id的按钮setId:设置按钮编号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 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 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 btnYourLove->button(i)->move(300,i*35); } //多选按钮默认是排斥的 qInfo()< btnYourLove->setExclusive(false); //设置不排斥 }