【Qt常用控件】—— 按钮类控件

发布于:2024-04-28 ⋅ 阅读:(26) ⋅ 点赞:(0)

目录

1.1 Push Button

1.2 Radio Buttion

1.3 Check Box

 1.4 Tool Button

1.5 小结


1.1 Push Button

使⽤ QPushButton 表⽰⼀个按钮. 这也是当前我们最熟悉的⼀个控件了.
QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类.

在 Qt Designer 中也能够看到这⾥的继承关系.

 QAbstractButton中 QPushButton 相关性较⼤的属性

1. QAbstractButton 作为 QWidget 的⼦类, 当然也继承了 QWidget 的属性. 上⾯介绍的 QWidget ⾥的各种属性⽤法, 对于 QAbstractButton 同样适⽤. 因此表格仅列出 QAbstractButton 独有的属性.
2. Qt 的 api 设计⻛格是⾮常清晰的. 此处列出的属性都是可以 获取 和 设置 的. 例如, 使
text() 获取按钮⽂本; 使⽤ setText() 设置⽂本.
  • 事实上, QPushButton 的核⼼功能都是 QAbstractButton 提供的. ⾃⾝提供的属性都⽐较简单.
  • 其中 default audoDefault 影响的是按下 enter 时⾃动点击哪个按钮的⾏为; flat 把按钮设置为扁平的样式. 这⾥我们暂时都不做过多关注.
代码⽰例: 带有图标的按钮
1) 创建 resource.qrc ⽂件, 并导入图片

2) 在界面上创建⼀个按钮

3) 修改 widget.cpp, 给按钮设置图标.
Widget::Widget(QWidget *parent)
     : QWidget(parent)
     , ui(new Ui::Widget)
{
     ui->setupUi(this);

     // 创建图标
     QIcon icon(":/doge.png");
     // 设置图标
     ui->pushButton->setIcon(icon);
     // 设置图标⼤⼩
     ui->pushButton->setIconSize(QSize(50, 50));
}
4) 执⾏程序, 观察效果


代码⽰例: 带有快捷键的按钮

1) 在界⾯中拖五个按钮.
  • 五个按钮的 objectName 分别为 pushButton_target , pushButton_up ,
  • pushButton_down , pushButton_left , pushButton_right
  • 五个按钮的初始位置随意, 其中 pushButton_target 尺⼨设置为 100 * 100, 其余按钮设为 50 *
  • 50. ⽂本内容均清空

2) 创建 resource.qrc , 并导入5 个图⽚.

3) 修改 widget.cpp, 设置图标资源和快捷键
  • 使⽤ setShortcut 给按钮设置快捷键. 参数是⼀个 QKeySequence 对象. 表⽰⼀个按键序列. ⽀ 持组合键 (ctrl + c 这种).
  • QKeySequence 的构造函数参数, 可以直接使⽤ "ctrl+c" 这样的按键名字符串表⽰, 也可以使⽤预定义好的常量 (形如 Qt::CTRL + Qt::Key_C ) 表示.
Widget::Widget(QWidget *parent)
     : QWidget(parent)
     , ui(new Ui::Widget)
{
     ui->setupUi(this);

     // 设置图标
    ui->pushButton_target->setIcon(QIcon(":/dog.png"));
    ui->pushButton_target->setIconSize(QSize(100, 100));
    ui->pushButton_up->setIcon(QIcon(":/caret-up.png"));
    ui->pushButton_down->setIcon(QIcon(":/caret-down.png"));
    ui->pushButton_left->setIcon(QIcon(":/caret-left.png"));
    ui->pushButton_right->setIcon(QIcon(":/caret-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"));

     // 设置快捷键也可以写作
     // ui->pushButton_up->setShortcut(QKeySequence(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));
}
4) 修改 widget.cpp, 设置四个⽅向键的 slot 函数.
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_down_clicked()
{
     const QRect& rect = ui->pushButton_target->geometry();
     ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(),
    rect.height());

     qDebug() << "down";
}

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

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() << "right";
}
5) 运行程序, 此时点击按钮, 或者使用 wasd 均可让狗头移动.


1.2 Radio Buttion

QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个

  1. 作为 QAbstractButton QWidget 的⼦类, 上⾯介绍的属性和⽤法, 对于 QRadioButton同样适⽤.

QAbstractButton 中和 QRadioButton 关系较⼤的属性

代码⽰例: 选择性别 

1) 在界⾯上创建⼀个 label, 和 3 个 单选按钮
  • 设置的⽂本如下图. 3 个单选按钮的 objectName 分别为 radioButton_male, radioButton_female , radioButton_other

2) 修改 widget.cpp, 编辑三个 QRadioButton 的 slot 函数 

void Widget::on_radioButton_male_clicked()
{
     ui->label->setText("你选择的性别为: 男");
}

void Widget::on_radioButton_female_clicked()
{
     ui->label->setText("你选择的性别为: ⼥");
}

void Widget::on_radioButton_other_clicked()
{
     ui->label->setText("你选择的性别为: 其他");
}
3) 运⾏程序, 可以看到随着选择不同的单选按钮, label 中的提⽰⽂字就会随之变化.

4) 当前代码中, 如果程序启动, 则不会选择任何选项.  

  • 可以修改代码, 让程序启动默认选中性别男
Widget::Widget(QWidget *parent)
     : QWidget(parent)
     , ui(new Ui::Widget)
{
     ui->setupUi(this);

     // 设置默认选中该按钮
     ui->radioButton_male->setChecked(true);
     ui->label->setText("你选择的性别为: 男");
}
  • 此时运⾏程序, 即可看到 性别男 已经被选中了
5) 当前代码中, 也可以禁⽤ "其他" 被选中.
  • 修改 widget.cpp 的构造函数
// 禁⽤ other 选项
ui->radioButton_other->setCheckable(false);
  • 运⾏程序, 可以看到, 点击 "其他" 按钮的时候, 虽然不会被选中, 但是可以触发点击事件, 使上⾯的 label 显⽰性别为其他.

使⽤ setEnabled 是更彻底的禁⽤按钮的⽅式. 此时该按钮⽆法被选中, 也⽆法响应任何输⼊  

// 禁⽤ other 选项
ui->radioButton_other->setEnabled(false);


1.3 Check Box

QCheckBox 表⽰复选按钮. 可以允许选中多个.
  • QCheckBox 最相关的属性也是 checkable checked , 都是继承⾃QAbstractButton .
  • ⾄于 QCheckBox 独有的属性 tristate ⽤来实现 "三态复选框" . 这个东西⽐较冷⻔, 咱们不 做讨论

代码⽰例: 获取复选按钮的取值

1) 在界⾯上创建 三个复选按钮, 和⼀个普通按钮.
  • objectName 分别为 checkBox_eat , checkBox_sleep , checkBox_play , 以及pushButton

2) 给 pushButton 添加 slot 函数  

void Widget::on_pushButton_clicked()
{
     QString result;
     if (ui->checkBox_eat->isChecked()) {
         result += ui->checkBox_eat->text();
     }
     if (ui->checkBox_sleep->isChecked()) {
         result += ui->checkBox_sleep->text();
     }
     if (ui->checkBox_play->isChecked()) {
         result += ui->checkBox_play->text();
     }
     qDebug() << "选中的内容: " << result;
}
3) 运⾏程序, 可以看到点击确认按钮时, 就会在控制台中输出选中的内容.


 1.4 Tool Button

QToolButton 的⼤部分功能, 和 QPushButton 是⼀致的. 但是 QToolButton 主要应⽤在⼯具栏, 菜单等场景. 这个我们暂时先不介绍.

1.5 小结

按钮类控件在用户界面开发中扮演着重要的角色,主要用于触发特定的操作或事件。以下是关于按钮类控件的小结:

  1. QPushButton

    • 用途:常用的按钮控件,用于触发各种操作。
    • 特点:可以显示文本和图标,支持样式表定制,发出 clicked() 信号响应用户点击。
  2. QToolButton

    • 用途:工具按钮控件,通常用于工具栏、菜单栏等。
    • 特点:支持文本和图标显示,可以设置弹出菜单或下拉菜单,可以作为常规按钮或复选按钮使用。
  3. QRadioButton

    • 用途:单选按钮控件,用于在一组选项中选择一个。
    • 特点:显示一个圆形按钮,可以与其他单选按钮分组,只能选择其中的一个。
  4. QCheckBox

    • 用途:复选框控件,用于允许用户选择一个或多个选项。
    • 特点:显示一个方形按钮,可以选中或取消选中,支持与其他复选框独立使用。
  5. QAbstractButton(抽象按钮类):

    • 用途:按钮类控件的抽象基类,不直接使用,而是作为其他按钮类的基类。
    • 特点:定义了按钮类的通用行为和接口,如按下状态、点击信号等。

这些按钮类控件都提供了丰富的功能和灵活的定制选项,开发者可以根据实际需求选择合适的按钮类型来构建用户界面。


网站公告

今日签到

点亮在社区的每一天
去签到