前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【QT】常用控件(二)

【QT】常用控件(二)

作者头像
s-little-monster
发布2024-10-18 09:50:43
820
发布2024-10-18 09:50:43
举报
文章被收录于专栏:乐意学点小编程

三、按钮类控件

1、Push Button

QPushButton继承自QAbstractButton,它是所有按钮的父类

我们从这个按钮的属性表中可以看到,QPushButton的父类是QAbstractButton,上面是QAbstractButton的父类QWidget,再向上就是QWidget的父类QObject

其中在QAbstractButton中,与QPushButton相关性较大的属性有这些: text:按钮文本 icon:按钮图标 iconSize:按钮图标尺寸 shortCut:按钮快捷键 autoRepeat:按钮重复触发设置 autoRepeatDelay:重复触发的延时时间 autoRepeatInterval:重复触发的周期

下面我们来展示使用一下以上提到的这些属性

widget.h
代码语言:javascript
复制
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_left_clicked();

    void on_pushButton_up_clicked();

    void on_pushButton_down_clicked();

    void on_pushButton_right_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
代码语言:javascript
复制
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->pushButton_target->setIcon(QIcon(":/slm.jpg"));
    ui->pushButton_target->setIconSize(QSize(200,200));

    ui->pushButton_up->setIcon(QIcon(":/up.png"));
    ui->pushButton_up->setIconSize(QSize(100,100));
    ui->pushButton_down->setIcon(QIcon(":/down.png"));
    ui->pushButton_down->setIconSize(QSize(100,100));
    ui->pushButton_left->setIcon(QIcon(":/left.png"));
    ui->pushButton_left->setIconSize(QSize(100,100));
    ui->pushButton_right->setIcon(QIcon(":/right.png"));
    ui->pushButton_right->setIconSize(QSize(100,100));

    ui->pushButton_up->setShortcut(Qt::Key_W);
    ui->pushButton_down->setShortcut(Qt::Key_S);
    ui->pushButton_left->setShortcut(Qt::Key_A);
    ui->pushButton_right->setShortcut(Qt::Key_D);


}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_left_clicked()
{
    QRect r = ui->pushButton_target->geometry();

    ui->pushButton_target->setGeometry(r.x()-10,r.y(),r.width(),r.height());

    qDebug() << "left";
}

void Widget::on_pushButton_up_clicked()
{
    QRect r = ui->pushButton_target->geometry();

    ui->pushButton_target->setGeometry(r.x(),r.y() - 10,r.width(),r.height());

    qDebug() << "up";
}

void Widget::on_pushButton_down_clicked()
{
    QRect r = ui->pushButton_target->geometry();

    ui->pushButton_target->setGeometry(r.x(),r.y() + 10,r.width(),r.height());

    qDebug() << "down";
}

void Widget::on_pushButton_right_clicked()
{
    QRect r = ui->pushButton_target->geometry();

    ui->pushButton_target->setGeometry(r.x()+10,r.y(),r.width(),r.height());

    qDebug() << "right";
}

pushbutton

观察视频我们可以发现,当我使用键盘快捷键按住时,会发生连点,而我用鼠标按住不会发生连点,这都是生成的默认值,我们可以通过下面的函数来打开鼠标连点模式

代码语言:javascript
复制
setAutoRepeat(true);

通过下面函数设置两次连点之间的最小时间

代码语言:javascript
复制
SetAutoRepeatDelay(1000);

我们知道有些游戏的挂是有连点器的,我们可以通过下面的函数来设置一个连点器,它是每经过特定的时间就会触发一次点击

代码语言:javascript
复制
setAutoRepeatInterval(500);

2、Radio Button

RadioButton就是单选选项,可以让我们在多个选项中选择一个,和QAbstractButton相关的属性:

checkable:能否被选中 checked:是否被选中 autoExclusive:是否选择后会取消其他按钮的选中,对于RadioButton默认为是

RadioButton

如果想要设置默认值,只需要在构造函数中先设置好初始值就行

但是这样的一个问题就是,如果我在界面上设置了十个RadioButton,但是这十个RadioButton对应的是五个判断题,那我们应该分五组,每组有一个被选择,此时我们就要用到qbuttongroup来进行分组

RadioButton_2

3、Check Box

qcheckbox是复选按钮,可以选中多个选项

checkbox

四、显示类控件

1、label

QLabel可以用来显示文本和图片

属性

说明

text

设置文本

textFormat

设置文本格式

pixmap

设置包含的图片

scaledContents

设置自动拉伸

alignment

设置对齐方式

wordWrap

设置自动换行

indent

设置文本缩进

margin

设置文本和边框之间的间距

openExternalLinks

设置是否允许打开外部链接

buddy

设置关联伙伴

第一段是普通文本,第二段是富文本,第三段是markdown文本

label

这里设置了自动拉伸但是不可充斥整个边框

想要充斥整个边框就需要用到C++多态的知识,对于父类的虚函数如果我们在子类中重写,将会执行子类的重写后的函数,这里的resizeEvent是一个在我们调整窗口大小的时候自动调用的函数,我们将其重写,将图片设置为充斥整个窗口

label_2

这里的QFrame用来设置边框的的性质,认识这个性质好让我们的下一步进行操作

代码语言:javascript
复制
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);//垂直水平居中
    ui->label->setText("super_little_monster");

    ui->label_2->setAlignment(Qt::AlignTop|Qt::AlignLeft);
    ui->label_2->setWordWrap(true);//自动换行
    ui->label_2->setText("这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本");
    //ui->label_2->setText("super_little_monster super_little_monster super_little_monster");

    ui->label_3->setAlignment(Qt::AlignTop|Qt::AlignLeft);
    ui->label_3->setIndent(20);//上左下有20的间距,右侧没有
    ui->label_3->setWordWrap(true);
    ui->label_3->setText("这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本");
    //ui->label_3->setText("super_little_monster super_little_monster super_little_monster");


    ui->label_4->setAlignment(Qt::AlignTop|Qt::AlignLeft);
    ui->label_4->setMargin(20);//上下左右都有20的间距
    ui->label_4->setWordWrap(true);
    ui->label_4->setText("这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本这是⼀个很⻓的⽂本");
    //ui->label_4->setText("super_little_monster super_little_monster super_little_monster");

}

Widget::~Widget()
{
    delete ui;
}

对于openExternalLinks,直接设置true或false

对于buddy 当我们把label的内容设置为“快捷键&”+某个按键的形式,当前label所绑定的buddy将会可以被键盘上的组合键alt+某个按键选中

这里生成的就可以被组合键也是快捷键选中

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三、按钮类控件
    • 1、Push Button
      • widget.h
      • widget.cpp
    • 2、Radio Button
      • 3、Check Box
      • 四、显示类控件
        • 1、label
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档