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

2.按钮类控件

①QPushButton 按钮

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

属性

说明

text

按钮中的文本

icon

按钮中的图标

iconSize

按钮中图标的尺寸

shortCut

按钮对应的快捷键

autoRepeat

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

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

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

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

autoRepeatDelay

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

autoRepeatInterval

重复触发的周期

  1. QAbstractButton作为QWidget的子类,当然也继承了QWidget的属性,上面介绍的QWidget里的各种属性用法,对于QAbstractButton同样适用,因此表格仅列出QAbstractButton独有的属性
  2. Qt的api设计风格是非常清晰的,此处列出的属性都是可以获取和设置的,例如,使用text()获取按钮文本;使用setText()设置文本

#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);
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt中,件的颜色可以使用QPalette或QBrush来设置。一般来说,QPalette主要用于制窗口的颜色,而QBrush则用于绘制图形和填充绘图区域的颜色。 对于按钮件来说,如果只是单纯地设置按钮的背景颜色和前景颜色,可以使用QPalette来设置。示例代码如下: ```cpp // 创建一个QPalette对象 QPalette palette; // 设置按钮的背景和前景颜色 palette.setColor(QPalette::Button, QColor(255, 0, 0)); palette.setColor(QPalette::ButtonText, QColor(255, 255, 255)); // 将设置好的QPalette应用到按钮件上 ui->pushButton->setPalette(palette); ``` 如果需要在按钮上绘制图形或者使用渐变填充等复杂的填充方式,可以使用QBrush来设置。示例代码如下: ```cpp // 创建一个QBrush对象 QBrush brush(QColor(255, 0, 0)); // 设置画刷样式为渐变填充 QLinearGradient gradient(QPointF(0, 0), QPointF(100, 100)); gradient.setColorAt(0, QColor(255, 0, 0)); gradient.setColorAt(1, QColor(0, 0, 255)); brush.setStyle(Qt::LinearGradientPattern); brush.setGradient(gradient); // 在按钮上绘制一个矩形 QPainter painter(ui->pushButton); painter.setBrush(brush); painter.drawRect(ui->pushButton->rect()); ``` 在上面的示例中,我们首先创建了一个QBrush对象,然后设置了画刷样式为渐变填充。最后使用QPainter在按钮上绘制了一个矩形。注意,在使用QBrush绘制图形时,我们需要在按钮的paintEvent事件中调用绘图代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Outlier_9

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

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

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

打赏作者

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

抵扣说明:

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

余额充值