【QT】按钮类控件

2024-07-08 1089阅读

按钮类控件

  • 按钮类控件
    • 1. PushButton
    • 2. Radio Button
    • 3. Check Box
    • 4. Tool Button

      按钮类控件

      1. PushButton

      使⽤ QPushButton 表示⼀个按钮,这也是当前我们最熟悉的⼀个控件了.

      QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类.

      【QT】按钮类控件

      在 Qt Designer 中也能够看到这⾥的继承关系:

      【QT】按钮类控件

      QAbstractButton 中, 和 QPushButton 相关性较⼤的属性

      【QT】按钮类控件

      代码⽰例: 带有图标的按钮

      			Widget::Widget(QWidget *parent)
      			    : QWidget(parent)
      			    , ui(new Ui::Widget)
      			{
      			    ui->setupUi(this);
      			
      			    // 创建图标
      			    QIcon icon(":/Linux.jpg");
      			    // 设置图标
      			    ui->pushButton->setIcon(icon);
      			    // 设置图标大小
      			    ui->pushButton->setIconSize(QSize(100, 100));
      			}
      

      【QT】按钮类控件

      代码示例2: 带有快捷键的按钮

      在界⾯中拖五个按钮:五个按钮的 objectName 分别为 pushButton_target , pushButton_up , pushButton_down , pushButton_left , pushButton_right

      【QT】按钮类控件

      使⽤ setShortcut 给按钮设置快捷键. 参数是⼀个 QKeySequence 对象. 表示⼀个按键序列. 支持组合键 (ctrl + c 这种).

      QKeySequence 的构造函数参数, 可以直接使⽤ “ctrl+c” 这样的按键名字符串表示, 也可以使⽤预定义好的常量 (形如 Qt::CTRL + Qt::Key_C ) 表⽰.

      			Widget::Widget(QWidget *parent)
      			    : QWidget(parent)
      			    , ui(new Ui::Widget)
      			{
      			    ui->setupUi(this);
      			
      			    // 设置图标
      			    ui->pushButton_target->setIcon(QIcon(":/target.png"));
      			    ui->pushButton_target->setIconSize(QSize(100, 100));
      			    ui->pushButton_up->setIcon(QIcon(":/up.png"));
      			    ui->pushButton_down->setIcon(QIcon(":/down.png"));
      			    ui->pushButton_left->setIcon(QIcon(":/left.png"));
      			    ui->pushButton_right->setIcon(QIcon(":/right.png"));
      			
      			    // 设置快捷键
      			    ui->pushButton_up->setShortcut(QKeySequence("w"));
      			    ui->pushButton_down->setShortcut(QKeySequence("s"));
      			    ui->pushButton_left->setShortcut(QKeySequence("a"));
      			    ui->pushButton_right->setShortcut(QKeySequence("d"));
      			}
      			
      			
      			// 按钮的槽函数
      			void Widget::on_pushButton_up_clicked()
      			{
      			    const QRect& rect = ui->pushButton_target->geometry();
      			    ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
      			}
      			
      			void Widget::on_pushButton_down_clicked()
      			{
      			    const QRect& rect = ui->pushButton_target->geometry();
      			    ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
      			}
      			
      			void Widget::on_pushButton_left_clicked()
      			{
      			    const QRect& rect = ui->pushButton_target->geometry();
      			    ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
      			}
      			
      			void Widget::on_pushButton_right_clicked()
      			{
      			    const QRect& rect = ui->pushButton_target->geometry();
      			    ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
      			}
      

      代码⽰例: 按钮的重复触发;在上述案例中, 按住快捷键, 是可以进⾏重复触发的. 但是⿏标点击则不能;修改 widget.cpp, 在构造函数中开启重复触发.

      			// 开始重复触发
      		    ui->pushButton_up->setAutoRepeat("true");
      		    ui->pushButton_down->setAutoRepeat("true");
      		    ui->pushButton_left->setAutoRepeat("true");
      		    ui->pushButton_right->setAutoRepeat("true");
      

      2. Radio Button

      QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个.

      作为 QAbstractButton 和 QWidget 的⼦类, 上⾯介绍的属性和⽤法, 对于 QRadioButton 同样适⽤.

      QAbstractButton 中和 QRadioButton 关系较⼤的属性

      【QT】按钮类控件

      代码⽰例: 选择性别

      【QT】按钮类控件

      			Widget::Widget(QWidget *parent)
      			    : QWidget(parent)
      			    , ui(new Ui::Widget)
      			{
      			    ui->setupUi(this);
      			
      			    // 禁⽤ other 选项
      			    ui->radioButton_3->setEnabled(false);
      			}
      			
      			void Widget::on_radioButton_clicked()
      			{
      			    ui->label->setText("你选择的性别为:男");
      			}
      			
      			
      			void Widget::on_radioButton_2_clicked()
      			{
      			    ui->label->setText("你选择的性别为:女");
      			}
      			
      			
      			void Widget::on_radioButton_3_clicked()
      			{
      			    ui->label->setText("你选择的性别为:其它");
      			}
      

      代码示例2:

      click, press, release, toggled 的区别

      • clicked 表⽰⼀次 “点击”
      • pressed 表⽰⿏标 “按下”
      • released 表⽰⿏标 “释放”
      • toggled 表⽰按钮状态切换
        1. 在界⾯上创建四个单选按钮,objectName 分别为 radioButton , radioButton_2 , radioButton_3 , radioButton_4

        2. 给 1 创建 clicked 槽函数, 给 2 创建 pressed 槽函数, 给 3 创建 released 槽函数, 给 4 创建 toggled 槽函数.

           		void Widget::on_radioButton_clicked()
           		{
           		    qDebug() radioButton_2);
          group2->addButton(ui->radioButton_3);
          group2->addButton(ui->radioButton_4);
          group3->addButton(ui->radioButton_5);
          group3->addButton(ui->radioButton_6);
          

          }

          结果如下:

          【QT】按钮类控件

          3. Check Box

          QCheckBox 表⽰复选按钮. 可以允许选中多个。

          和 QCheckBox 最相关的属性也是 checkable 和 checked , 都是继承⾃ QAbstractButton .

          代码⽰例1: 获取复选按钮的取值

          1)在界⾯上创建 三个复选按钮, 和⼀个普通按钮.

          objectName 分别为 checkBox_eat , checkBox_sleep , checkBox_play , 以及 pushButton

          【QT】按钮类控件

          			void Widget::on_pushButton_clicked()
          			{
          			    QString text = ui->label->text();
          			    // 判断选项是否被选中
          			    if(ui->checkBox->isChecked()){
          			        text += ui->checkBox->text() + " ";
          			    }
          			    if(ui->checkBox_2->isChecked()){
          			        text += ui->checkBox_2->text() + " ";
          			    }
          			    if(ui->checkBox_3->isChecked()){
          			        text += ui->checkBox_3->text() + " ";
          			    }
          			    ui->label->setText(text);
          			}
          

          4. Tool Button

          QToolButton 的⼤部分功能, 和 QPushButton 是⼀致的. 但是 QToolButton 主要应⽤在⼯具栏,菜单等场景. 这个我们暂时先不介绍。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]