您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页C++客户端Qt开发——常用控件(按钮类控件)

C++客户端Qt开发——常用控件(按钮类控件)

来源:化拓教育网

2.按钮类控件

①QPushButton 按钮

继承自QAbstractButton,这个类是⼀个抽象类,是其他按钮的父类

属性

说明

text

按钮中的文本

icon

按钮中的图标

iconSize

按钮中图标的尺寸

shortCut

按钮对应的快捷键

autoRepeat

按钮是否会触发,当鼠标左键按住不放时

如果设为true,则会持续产生鼠标点击事件

如果设为false,则必须释放鼠标,再次按下鼠标时才能产生点击事件

(相当于游戏手柄上的“连发”效果)

autoRepeatDelay

重复触发的延时时间,按住按钮多久以后开始重复触发

autoRepeatInterval

重复触发的周期

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建图标对象
    QIcon icon(":/r.png");
    // 设置图标
    ui->pushButton_target->setIcon(icon);
    //设置尺寸
    ui->pushButton_target->setIconSize(QSize(80,80));

    ui->pushButton_up->setIcon(QIcon(":/Triangle3.png"));
    ui->pushButton_up->setIconSize(QSize(50,50));

    ui->pushButton_down->setIcon(QIcon(":/Triangle1.png"));
    ui->pushButton_down->setIconSize(QSize(50,50));

    ui->pushButton_left->setIcon(QIcon(":/Triangle4.png"));
    ui->pushButton_left->setIconSize(QSize(50,50));

    ui->pushButton_right->setIcon(QIcon(":/Triangle2.png"));
    ui->pushButton_right->setIconSize(QSize(50,50));

    // 设置快捷键
//    ui->pushButton_up->setShortcut(QKeySequence("ctrl+w"));
//    ui->pushButton_down->setShortcut(QKeySequence("s"));
//    ui->pushButton_left->setShortcut(QKeySequence("a"));
//    ui->pushButton_right->setShortcut(QKeySequence("d"));
    // 还可以使用按键的枚举设置快捷键
    ui->pushButton_up->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_W)); // 组合键
    ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));
    ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));
    ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));

    // 键盘自带设置连发功能,鼠标需要手动开启
    ui->pushButton_up->setAutoRepeat(true);
    ui->pushButton_down->setAutoRepeat(true);
    ui->pushButton_left->setAutoRepeat(true);
    ui->pushButton_right->setAutoRepeat(true);
}

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


void Widget::on_pushButton_up_clicked()
{
    // 获取到target位置
    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()
{
    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()
{
    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()
{
    QRect rect = ui->pushButton_target->geometry();
    ui->pushButton_target->setGeometry(rect.x()+5,rect.y(),rect.width(),rect.height());
}

②Radio Buttion 单选按钮

QRadioButtion是单选按钮,可以让我们在多个选项中选择一个

属性

说明

checkable

是否能选中

checked

是否已经被选中,checkable是checked的前提条件

autoExclusive

是否排他

选中一个按钮之后是否会取消其他的选中

对于QRadioButton来说默认就是排他的

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //添加一个默认选项
    ui->man->setChecked(true);
    ui->label->setText("您选择的性别为:男");

    //禁用其他选项
    //setCheckable只能让按钮不被选中,仍然是可以相应点击事件的
    //ui->other->setCheckable(false);
    //推荐用下边两种之一
    ui->other->setEnabled(false);
    //ui->other->setDisabled(true);
}

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


void Widget::on_man_clicked()
{
    ui->label->setText("您选择的性别为男");
}

void Widget::on_woman_clicked()
{
    ui->label->setText("您选择的性别为女");
}

void Widget::on_other_clicked()
{
    ui->label->setText("您选择的性别为其他");
}

void Widget::on_radioButton_clicked(bool checked)
{
    //checked表示当前被选中的状态
    qDebug() << "clicked:" << checked;
}

void Widget::on_radioButton_2_clicked()
{
    //checked表示当前被选中的状态
    qDebug() << "pressed";
}

void Widget::on_radioButton_3_clicked()
{
    //checked表示当前被选中的状态
    qDebug() << "released";
}

void Widget::on_radioButton_4_toggled(bool checked)
{
    //checked表示当前被选中的状态
    qDebug() << "toggled:" << checked;
}

基于RadioButton实现一个模拟点餐功能

Qt提供了QButtonGroup能够对按钮进行分组

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 使用QButtonGroup对单选按钮进行分组
    QButtonGroup* group1 = new QButtonGroup(this);
    QButtonGroup* group2 = new QButtonGroup(this);
    QButtonGroup* group3 = new QButtonGroup(this);

    //将选项放到不同的组
    group1->addButton(ui->radioButton);
    group1->addButton(ui->radioButton_2);
    group1->addButton(ui->radioButton_3);

    group2->addButton(ui->radioButton_4);
    group2->addButton(ui->radioButton_5);
    group2->addButton(ui->radioButton_6);

    group3->addButton(ui->radioButton_7);
    group3->addButton(ui->radioButton_8);
}

③Check Box 复选按钮

QCheckBox表示复选按钮.可以允许选中多个和CheckBox最相关的属性也是checkablechecked,都是继承自QAbstractButton至于QCheckBox独有的属性tristate用来实现"三态复选框",这个东西比较冷门,咱们课堂不做讨论.

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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


void Widget::on_pushButton_clicked()
{
    QString result = "今天你的安排是:";
    if(ui->checkBox->isChecked()){
        result += ui->checkBox->text() + " ";
    }
    if(ui->checkBox_2->isChecked()){
        result += ui->checkBox_2->text() + " ";
    }
    if(ui->checkBox_3->isChecked()){
        result += ui->checkBox_3->text() + " ";
    }
    ui->label->setText(result);
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务