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 是⼀致的。


相关推荐
xj7573065331 天前
《python web开发 测试驱动方法》
开发语言·前端·python
CSDN_RTKLIB1 天前
inline内联函数基础知识
开发语言·c++
No0d1es1 天前
2025年12月 GESP CCF编程能力等级认证Python四级真题
开发语言·python·青少年编程·等级考试·gesp·ccf
love530love1 天前
EPGF 新手教程 13在 PyCharm(中文版 GUI)中创建 Hatch 项目环境,并把 Hatch 做成“项目自包含”(工具本地化为必做环节)
开发语言·ide·人工智能·windows·python·pycharm·hatch
Ralph_Y1 天前
C++异常对象
开发语言·c++
baiduopenmap1 天前
【智图译站】GENREGION——高准确度、高可扩展的城市区域自动划分方法
开发语言·百度地图
蚰蜒螟1 天前
Redis网络层深度解析:数据如何写回客户端
java·开发语言·bootstrap
No0d1es1 天前
2025年12月 GESP CCF编程能力等级认证Python五级真题
开发语言·python·青少年编程·等级考试·gesp·ccf
风送雨1 天前
Go 语言进阶学习:第 2 周 —— 接口、反射与错误处理进阶
开发语言·学习·golang