QT按钮控件




🌈个人主页: 南桥几晴秋
🌈C++专栏: 南桥谈C++
🌈C语言专栏: C语言学习系列
🌈Linux学习专栏: 南桥谈Linux
🌈数据结构学习专栏: 数据结构杂谈
🌈数据库学习专栏: 南桥谈MySQL
🌈Qt学习专栏: 南桥谈Qt
🌈菜鸡代码练习: 练习随想记录
🌈git学习: 南桥谈Git

🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 本科在读菜鸡一枚,指出问题及时改正



category: QT学习

代码仓库

QPushButton

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

  • QPushButton
  • QCheckBox
  • QWidget
  • QAbstractButton
  • QRadioButton
  • QToolButton
  1. QAbstractButton 作为 QWidget 的子类,当然也继承了 QWidget 的属性。

  2. Qt 的 API 设计风格是非常清晰的。

    例如,使用 text() 获取按钮文本;使用 setText() 设置文本。

例:带有图标的按钮

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QIcon icon(":/hamster.png");
    ui->pushButton->setIcon(icon);
    ui->pushButton->setIconSize(QSize(50,50));
}

例:带有快捷键的按钮

通过方向键,控制pushButton_target上下左右移动

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QIcon icon(":/dog.png");
    ui->pushButton_target->setIcon(icon);
    ui->pushButton_target->setIconSize(QSize(50,50));
    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"));
}

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


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());
    qDebug()<<"up";
}

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());
    qDebug()<<"up";
}

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());
    qDebug()<<"up";
}

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());
    qDebug()<<"up";
}

按着鼠标可连续触发

cpp 复制代码
    //连续复发
    ui->pushButton_up->setAutoRepeat(true);
    ui->pushButton_down->setAutoRepeat(true);
    ui->pushButton_left->setAutoRepeat(true);
    ui->pushButton_right->setAutoRepeat(true);

RadioButtion

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

作为 QAbstractButtonQWidget 的子类,上面介绍的属性和用法对 QRadioButton 同样适用。

QAbstractButton 中与 QRadioButton 关系较大的属性

属性 说明
checkable 是否能选中
checked 是否已经被选中。checkablechecked 的前提条件。
autoExclusive 是否排他。选中一个按钮之后是否会取消其他按钮的选中。对于 QRadioButton 来说默认就是排他的。

例:选择性别

cpp 复制代码
void Widget::on_radioButton_man_clicked()
{
    ui->label->setText("你的性别为:男");
}

void Widget::on_radioButton_women_clicked()
{
    ui->label->setText("你的性别为:女");
}

void Widget::on_radioButton_other_clicked()
{
    ui->label->setText("你的性别为:其他");
}

设置为默认按钮

cpp 复制代码
//设置为默认按钮
ui->radioButton_man->setChecked(true);
ui->label->setText("你的性别为:男");

禁用按钮

cpp 复制代码
//禁用 其他 按钮
ui->radioButton_other->setCheckable(false);

上述代码虽然禁用了"其他"按钮,但是文本依然会改变。

彻底禁用:

cpp 复制代码
//彻底禁用
ui->radioButton_other->setEnabled(false);

click,press,release, toggled 的区别

信号 含义
clicked 一次"点击"(按下+释放)
pressed 鼠标"按下"
released 鼠标"释放"
toggled 按钮状态切换(选中/未选中)
  • clicked:一次"鼠标按下 + 鼠标释放"后触发。
  • pressed:鼠标按下时触发。
  • released:鼠标释放时触发。
  • toggled:当 checked 属性改变时触发。

总的来说,toggled 最适合 QRadioButton


单选框分组

模拟麦当劳点餐

要求:每⼀组内部来控制排他,但是组和组之间不能排他

cpp 复制代码
//模拟麦当劳
//创建组
QButtonGroup *group1 = new QButtonGroup(this);
QButtonGroup *group2 = new QButtonGroup(this);
QButtonGroup *group3 = new QButtonGroup(this);
//两两一组
group1->addButton(ui->radioButton);
group1->addButton(ui->radioButton_2);
group2->addButton(ui->radioButton_3);
group2->addButton(ui->radioButton_4);
group3->addButton(ui->radioButton_5);
group3->addButton(ui->radioButton_6);

CheckBox

QCheckBox 表示复选按钮,可以允许选中多个。 和 QCheckBox 最相关的属性也是 checkablechecked,都继承自 QAbstractButton。

QCheckBox 独有的属性:

  • tristate:用来实现"三态复选框"。

例:获取复选按钮的取值

cpp 复制代码
QString ans;
if(ui->checkBox_eat->isChecked())
    ans+=ui->checkBox_eat->text();
if(ui->checkBox_sleep->isChecked())
    ans+=ui->checkBox_sleep->isChecked();
if(ui->checkBox_play->isChecked())
    ans+=ui->checkBox_play->text();
ui->label_5->setText(ans);

Tool Button

QToolButton 的⼤部分功能,和 QPushButton 是⼀致的。


相关推荐
灰子学技术24 分钟前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰1 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码1 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚1 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂1 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas1361 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐1 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
Monly212 小时前
Java:修改打包配置文件
java·开发语言
我命由我123452 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
island13142 小时前
CANN ops-nn 算子库深度解析:核心算子(如激活函数、归一化)的数值精度控制与内存高效实现
开发语言·人工智能·神经网络