
🌈个人主页: 南桥几晴秋
🌈C++专栏: 南桥谈C++
🌈C语言专栏: C语言学习系列
🌈Linux学习专栏: 南桥谈Linux
🌈数据结构学习专栏: 数据结构杂谈
🌈数据库学习专栏: 南桥谈MySQL
🌈Qt学习专栏: 南桥谈Qt
🌈菜鸡代码练习: 练习随想记录
🌈git学习: 南桥谈Git
🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 本科在读菜鸡一枚,指出问题及时改正
category: QT学习
QPushButton
继承自 QAbstractButton。这个类是一个抽象类,是其他按钮的父类。
- QPushButton
- QCheckBox
- QWidget
- QAbstractButton
- QRadioButton
- QToolButton
-
QAbstractButton 作为 QWidget 的子类,当然也继承了 QWidget 的属性。
-
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 是单选按钮,可以让我们在多个选项中选择一个。
作为 QAbstractButton 和 QWidget 的子类,上面介绍的属性和用法对 QRadioButton 同样适用。
QAbstractButton 中与 QRadioButton 关系较大的属性
| 属性 | 说明 |
|---|---|
| checkable | 是否能选中 |
| checked | 是否已经被选中。checkable 是 checked 的前提条件。 |
| 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 最相关的属性也是 checkable 和 checked,都继承自 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 是⼀致的。