2.按钮类控件
①QPushButton 按钮
继承自QAbstractButton,这个类是⼀个抽象类,是其他按钮的父类
属性 | 说明 |
text | 按钮中的文本 |
icon | 按钮中的图标 |
iconSize | 按钮中图标的尺寸 |
shortCut | 按钮对应的快捷键 |
autoRepeat | 按钮是否会触发,当鼠标左键按住不放时 如果设为true,则会持续产生鼠标点击事件 如果设为false,则必须释放鼠标,再次按下鼠标时才能产生点击事件 (相当于游戏手柄上的“连发”效果) |
autoRepeatDelay | 重复触发的延时时间,按住按钮多久以后开始重复触发 |
autoRepeatInterval | 重复触发的周期 |
- QAbstractButton作为QWidget的子类,当然也继承了QWidget的属性,上面介绍的QWidget里的各种属性用法,对于QAbstractButton同样适用,因此表格仅列出QAbstractButton独有的属性
- 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
最相关的属性也是checkable
和checked
,都是继承自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);
}