Qt:QPushButton、QRadioButton、QCheckBox

目录

一、QPushButton

1.认识QPushButton

2.设置按钮图标

3.设置按钮的快捷键

二、QRadioButton

常用的信号

按钮的分组

三、QCheckBox


一、QPushButton

1.认识QPushButton

QPushButton继承自QWidget,所以在上一篇文章中介绍的QWidget的属性,理论上都是可以使用的。

严格来说,QPushButton并不是直接继承QWidget,而是QAbstractButton,这个类是一个抽象类,即接口类,包含了纯虚函数。

在QAbstractButton中,和QPushtButton关联较大的属性如下。

2.设置按钮图标

cpp 复制代码
    QIcon icon(":/LInux.jpg");
    ui->pushButton->setIcon(icon);
    //
    QSize q(100,100);
    ui->pushButton->setIconSize(q);

3.设置按钮的快捷键

cpp 复制代码
    //设置快捷键
    //方法一:直接写出按键的名称,容易出错
    ui->pushButton->setShortcut(QKeySequence("w"));
    //方法二:使用Qt内置的快捷键枚举
    ui->pushButton->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_A));

此外,我们知道在FPS游戏中,可以长按鼠标左键连发,相应的,对于一个按钮,是否可以长按鼠标左键来连击,并且默认情况下,按住键盘不松手,默认就是连续点击,那么可以设置鼠标的长按触发连击吗

cpp 复制代码
//设置鼠标连击
ui->pushButton->setAutoRepeat(true);

二、QRadioButton

单选按钮,用来在多个选项中选择一个。

在QAbstractButton中,和QRadioButton关联较大的属性如下。

cpp 复制代码
//让一个选项被选中
ui->radioButton->setChecked(true);
//
ui->radioButton->setCheckable(false);
//设置按钮不能被选中,但是按钮还是会响应执行槽函数。
故可以设置为
ui->radioButton->setEnabled(false);

常用的信号

cpp 复制代码
void Widget::on_radioButton_clicked(bool checked)
{
    //checked表示按钮被选中,被选中时点击按钮,触发该信号
    qDebug() << "checked"<<checked;
}

void Widget::on_radioButton_2_pressed()
{
    //pressed表示按下了按钮,但没有松开
    qDebug() << "pressed";
}

void Widget::on_radioButton_3_released()
{
    //released表示松开按住的按钮
    qDebug() << "released";
}

void Widget::on_radioButton_4_toggled(bool checked)
{
    //toggled表示切换状态时的信号
    qDebug() << "toggled" << checked;
}

按钮的分组

部分场景下,要对按钮分组,否则所有按钮之间都存在排他关系。而实际需求是让组和组之间不存在排他关系。

三、QCheckBox

QCheckBox表示复选按钮,可以允许选中多个。

和QCheckBox相关的属性也是checkable和checked, 都是继承自QAbstractButton,至于QCheckBox独有的属性tristate用来实现"三态复选框",比较冷门,不作介绍。

代码举例

cpp 复制代码
void Widget::on_pushButton_clicked()
{
    QString res = "今天的任务是:";
    if(ui->checkBox->isChecked())
    {
        res += ui->checkBox->text() + "、";
    }
    if(ui->checkBox_2->isChecked())
    {
        res += ui->checkBox_2->text() + "、";
    }
    if(ui->checkBox_3->isChecked())
    {
        res += ui->checkBox_3->text();
    }
    ui->label->setText(res);
}