• QT按钮介绍


    目录

    按钮基类 QAbstractButton

    QPushButton

    QToolButton

    QRadioButton

    QCheckBox


    按钮基类 QAbstractButton

    这是按钮的基类,它是继承QWidget类

     它可对当前的图标,标题等进行设置。

    它有自己的一些信号与槽函数:

    /*
    当按钮被激活时(即,当鼠标光标在按钮内时按下然后释放),当键入快捷键时,或者当click()或animateClick()被调用时,这个信号被发出。值得注意的是,如果调用setDown()、setChecked()或toggle(),则不会触发此信号。
    */
    [signal] void QAbstractButton::clicked(bool checked = false);
    // 在按下按钮的时候发射这个信号
    [signal] void QAbstractButton::pressed();
    // 在释放这个按钮的时候发射直观信号
    [signal] void QAbstractButton::released();
    // 每当可检查按钮改变其状态时,就会发出此信号。checked在选中按钮时为true,在未选中按钮时为false。
    [signal] void QAbstractButton::toggled(bool checked);

    // 执行一个动画点击:按钮被立即按下,并在毫秒后释放(默认是100毫秒)。
    [slot] void QAbstractButton::animateClick(int msec = 100);
    // 执行一次按钮点击, 相当于使用鼠标点击了按钮
    [slot] void QAbstractButton::click();

    // 参考 1.2 中的函数介绍
    [slot] void QAbstractButton::setChecked(bool);
    // 设置按钮上图标大小
    [slot]void setIconSize(const QSize &size);
    // 切换可检查按钮的状态。 checked <==> unchecked
    [slot] void QAbstractButton::toggle();

    QPushButton

    一些常见API:

    // 判断按钮是不是默认按钮
    bool isDefault() const;
    // 一般在对话框窗口中使用, 将按钮设置为默认按钮, 自动关联 Enter 键 
    void setDefault(bool);

    将弹出菜单菜单与此按钮关联起来。这将把按钮变成一个菜单按钮,
    在某些样式中会在按钮文本的右边产生一个小三角形。
    void QPushButton::setMenu(QMenu *menu);

    /*
    显示(弹出)相关的弹出菜单。如果没有这样的菜单,这个函数什么也不做。
    这个函数直到弹出菜单被用户关闭后才返回。
    */
    [slot] void QPushButton::showMenu();

    例如:

    1. MainWindow::MainWindow(QWidget *parent)
    2. : QMainWindow(parent)
    3. , ui(new Ui::MainWindow)
    4. {
    5. ui->setupUi(this);
    6. ui->nor->setText("普通按钮");
    7. ui->nor->setIcon(QIcon("D:\\m.jpg"));
    8. ui->nor->setIconSize(QSize(120,100));
    9. connect(ui->nor,&QPushButton::clicked,this,[=](){
    10. QMessageBox::information(this,"information","click");
    11. });
    12. //设置check属性按钮
    13. ui->check->setCheckable(true);
    14. // 设置关联菜单按钮
    15. ui->menu->setText("你喜欢的水果");
    16. QMenu* m=new QMenu;
    17. QAction* q1=m->addAction("苹果");
    18. QAction* q2=m->addAction("栗子");
    19. QAction* q3=m->addAction("菠萝");
    20. ui->menu->setMenu(m);
    21. connect(q1,&QAction::triggered,this,[=]()
    22. {
    23. QMessageBox::information(this,"inforam","你喜欢的水果是苹果");
    24. });
    25. }
    26. MainWindow::~MainWindow()
    27. {
    28. delete ui;
    29. }
    30. void MainWindow::on_check_toggled(bool checked)
    31. {
    32. qDebug()<<"这是一个check"<<" "<<checked;
    33. }
    34. void MainWindow::on_pushButton_clicked()
    35. {
    36. ui->menu->showMenu();//调用槽函数,显示菜单
    37. }

    QToolButton

    用方法和功能跟QPushButton基本一致, 只不过在对于关联菜单这个功能点上, QToolButton类可以设置弹出的菜单的属性, 以及在显示图标的时候可以设置更多的样式.

    常用API:

    /*
        1. 将给定的菜单与此工具按钮相关联。
        2. 菜单将根据按钮的弹出模式显示。
        3. 菜单的所有权没有转移到“工具”按钮(不能建立父子关系)
    */
    void QToolButton::setMenu(QMenu *menu);
    // 返回关联的菜单,如果没有定义菜单,则返回nullptr。
    QMenu *QToolButton::menu() const;

    /*
    弹出菜单的弹出模式是一个枚举类型: QToolButton::ToolButtonPopupMode, 取值如下:
        - QToolButton::DelayedPopup: 
            - 延时弹出, 按压工具按钮一段时间后才能弹出, 比如:浏览器的返回按钮
            - 长按按钮菜单弹出, 但是按钮的 clicked 信号不会被发射
        - QToolButton::MenuButtonPopup: 
            - 在这种模式下,工具按钮会显示一个特殊的箭头,表示有菜单。
        - 当按下按钮的箭头部分时,将显示菜单。按下按钮部分发射 clicked 信号
        - QToolButton::InstantPopup: 
            - 当按下工具按钮时,菜单立即显示出来。
            - 在这种模式下,按钮本身的动作不会被触发(不会发射clicked信号
    */
    // 设置弹出菜单的弹出方式
    void setPopupMode(QToolButton::ToolButtonPopupMode mode);
    // 获取弹出菜单的弹出方式
    QToolButton::ToolButtonPopupMode popupMode() const;

    /*

    *
    QToolButton可以帮助我们在按钮上绘制箭头图标, 是一个枚举类型, 取值如下: 
        - Qt::NoArrow: 没有箭头
        - Qt::UpArrow: 箭头向上
        - Qt::DownArrow: 箭头向下
        - Qt::LeftArrow: 箭头向左
        - Qt::RightArrow: 箭头向右
    */
    // 显示一个箭头作为QToolButton的图标。默认情况下,这个属性被设置为Qt::NoArrow。
    void setArrowType(Qt::ArrowType type);
    // 获取工具按钮上显示的箭头图标样式
    Qt::ArrowType arrowType() const;

    // 基于QAction的方式给按钮设置图标和文本信息,显示菜单项时会延时展示

     代码:

    1. Form::Form(QWidget *parent) :
    2. QWidget(parent),
    3. ui(new Ui::Form)
    4. {
    5. ui->setupUi(this);
    6. ui->nor->setText("普通按钮");
    7. ui->nor->setIcon(QIcon("D:\\m.jpg"));
    8. ui->nor->setIconSize(QSize(120,100));
    9. ui->nor->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);//显出文本信息
    10. connect(ui->nor,&QToolButton::clicked,this,[=](){
    11. QMessageBox::information(this,"information","click");
    12. });
    13. //设置check属性按钮
    14. ui->check->setCheckable(true);
    15. connect(ui->check,&QToolButton::clicked,this,[=](bool checked){
    16. qDebug()<<"这是一个check"<<" "<<checked;
    17. });
    18. //设置关联菜单按钮
    19. ui->menu->setText("你喜欢的水果");
    20. QMenu* m=new QMenu;
    21. QAction* q1=m->addAction("苹果");
    22. QAction* q2=m->addAction("栗子");
    23. QAction* q3=m->addAction("菠萝");
    24. ui->menu->setMenu(m);//该菜单会延时显示在这种模式下,按钮本身的动作不会被触发(不会发射clicked信号)
    25. connect(q1,&QAction::triggered,this,[=]()
    26. {
    27. QMessageBox::information(this,"inforam","你喜欢的水果是苹果");
    28. });
    29. connect(ui->menu,&QToolButton::clicked,this,[](){
    30. qDebug()<<"menu click";
    31. });
    32. // 基于QAction的方式给按钮设置图标和文本信息
    33. QAction* actBtn = new QAction(QIcon("D:\\h.jpg"), "奥利给");
    34. ui->actionBtn->setDefaultAction(actBtn);
    35. connect(ui->actionBtn, &QToolButton::triggered, this, [=](QAction* act)
    36. {
    37. act->setText("我是修改之后的马里奥...");
    38. act->setIcon(QIcon("D:\\m.jpg"));
    39. });
    40. // 设置图标和文本的显示模式
    41. ui->actionBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    42. // 基于自带样式, 给按钮设置箭头图标
    43. ui->arrowBtn->setArrowType(Qt::UpArrow);
    44. ui->arrowBtn->setText("向上");
    45. // 设置图标和文本的显示模式
    46. ui->arrowBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    47. }
    48. Form::~Form()
    49. {
    50. delete ui;
    51. }

    QRadioButton

    QRadioButton是Qt提供的单选按钮, 一般都是以组的方式来使用(多个按钮中同时只能选中其中一个),如果单选按钮被选中, 再次点击这个按钮选中状态是不能被取消的。

    QCheckBox

    QCheckBox是Qt中的复选框按钮, 可以单独使用, 也可以以组的方式使用(同一组可以同时选中多个), 当复选按钮被选中, 再次点击之后可以取消选中状态, 这一点和单选按钮是不同的。对复选框按钮操作的时候, 可以设置选中和未选中状态, 并且还可以设置半选中状态。

    常用API:

    // 构造函数
    /*
    参数:
        - text: 按钮上显示的文本信息
        - parent: 按钮的父对象
    */
    QCheckBox::QCheckBox(const QString &text, QWidget *parent = nullptr);
    QCheckBox::QCheckBox(QWidget *parent = nullptr);

    // 判断当前复选框是否为三态复选框, 默认情况下为两种状态: 未选中, 选中
    bool isTristate() const;
    // 设置当前复选框为三态复选框: 未选中, 选中, 半选中
    void setTristate(bool y = true);

    /*
    参数 state, 枚举类型 Qt::CheckState:
        - Qt::Unchecked          --> 当前复选框没有被选中
        - Qt::PartiallyChecked    --> 当前复选框处于半选中状态, 部分被选中(三态复选框)
        - Qt::Checked          --> 当前复选框处于选中状态
    */
    // 设置复选框按钮的状态
    void QCheckBox::setCheckState(Qt::CheckState state);
    // 获取当前复选框的状态
    Qt::CheckState QCheckBox::checkState() const;

    // 当复选框的状态改变时,即当用户选中或取消选中复选框时,他的信号就会发出。
    // 参数 state 表示的是复选框的三种状态中某一种, 可参考 Qt::CheckState
    [signal] void QCheckBox::stateChanged(int state);

     代码:

    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"
    3. MainWindow::MainWindow(QWidget *parent)
    4. : QMainWindow(parent)
    5. , ui(new Ui::MainWindow)
    6. ,count(0)
    7. {
    8. ui->setupUi(this);
    9. ui->checkBox_3->setTristate(true);
    10. connect(ui->checkBox_3,&QCheckBox::clicked,this,[&](bool b){
    11. if(b)
    12. {
    13. ui->checkBox_2->setChecked(true);
    14. ui->checkBox->setChecked((true));
    15. ui->checkBox_4->setChecked((true));
    16. }
    17. else
    18. {
    19. ui->checkBox_2->setChecked(false);
    20. ui->checkBox->setChecked((false));
    21. ui->checkBox_4->setChecked((false));
    22. }
    23. });
    24. connect(ui->checkBox_2,&QCheckBox::stateChanged,this,&MainWindow::Statechange);
    25. connect(ui->checkBox,&QCheckBox::stateChanged,this,&MainWindow::Statechange);
    26. connect(ui->checkBox_4,&QCheckBox::stateChanged,this,&MainWindow::Statechange);
    27. }
    28. MainWindow::~MainWindow()
    29. {
    30. delete ui;
    31. }
    32. void MainWindow::Statechange(int state)
    33. {
    34. if(state==Qt::Checked)
    35. {
    36. count++;
    37. }
    38. else if(state==Qt::Unchecked)
    39. {
    40. count--;
    41. }
    42. if(count==3)
    43. {
    44. ui->checkBox_3->setCheckState(Qt::Checked);
    45. }
    46. else if(count==0)
    47. {
    48. ui->checkBox_3->setCheckState(Qt::Unchecked);
    49. }
    50. else
    51. ui->checkBox_3->setCheckState(Qt::PartiallyChecked);
    52. }


     

  • 相关阅读:
    自动铅笔的简笔画怎么画,自动化简笔画图片大全
    计算机毕业设计JAVA百姓点评网的设计与实现mybatis+源码+调试部署+系统+数据库+lw
    算法课作业2 OJ for Divide and Conquer
    SLAM本质剖析-Boost之Geometry函数大全(二)
    python基于PHP+MySQL的大学生求职招聘网站
    视频监控系统/视频汇聚平台EasyCVR平台页面展示优化
    企业浏览器安全管理
    python细节随笔
    SOLIDWORKS 2023交互设计新功能——协作处理团队数据 简化繁琐操作
    JAVA计算机毕业设计重工教师职称管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  • 原文地址:https://blog.csdn.net/m0_64397669/article/details/132909887