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


相关推荐
用户805533698033 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner3 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz8 天前
QML Hello World 入门示例
qt
xcyxiner11 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner12 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner12 天前
DicomViewer (添加模型类)3
qt
xcyxiner13 天前
DicomViewer (目录调整) 2
qt
xcyxiner13 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00615 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术15 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript