Qt第四章基本控件

第四章Qt基本控件

1.按钮

QAbstractButton(抽象类)

QAbstractButton类实现了一个抽象按钮,并且让它的子类来指定如何处理用户的动作,并且指定如何绘制按钮
QAbstractButton提供了点击和勾选按钮。

QRadioButton和QCheakBoxl类只提供了勾选按钮
QPushButton和QToolButton提供了点击按钮,如果需要的话,它们还可以提供切换行为、

要子类化QAbstractButton,您至少必须重新实现paintEvent()来绘制按钮的轮廓极骑文本或像素图。

1.PushButton(按钮)

#include "Widget.h"
#include<QPushButton>
#include<QMenu>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->resize(600,400);
    auto pushBtn = new QPushButton("按钮",this);
    pushBtn->resize(200,100);//调整按钮大小
    
    connect(pushBtn,&QPushButton::clicked,[=]{
        static int i=0;
        pushBtn->setText(QString("按下第%1次").arg(++i));//设置显示文字
        pushBtn->setIcon(QPixmap(":/C:/Users/PVer/Pictures/Resource/wendi.bmp"));//设置图标
        pushBtn->setIconSize(QSize(i,i));//设置图标大小
    });
    
    pushBtn->setShortcut(QKeySequence(tr("Ctrl+p")));//设置快捷键
    
    //设置长按,一直按着会触发点击事件(按下,弹起循环)
    pushBtn->setAutoRepeat(true);
    pushBtn ->setAutoRepeatDelay(3000);//按着3秒判定为长按
    pushBtn->setAutoRepeatInterval(500);//间隔500毫秒
    
    //给按钮设置菜单
    QMenu *menu = new QMenu;
    menu->addAction("孙悟空");
    menu->addAction("猪八戒");
    pushBtn->setMenu(menu);
    
    //设置菜单的信号和槽
    connect(menu,&QMenu::triggered,[=](QAction *act){
        qInfo()<<act->text();//输出选中的文本
    });
    
    pushBtn->setFlat(true);//去掉背景
    
}

2.工具按钮(ToolButton)

通常不显示文本标签,而是显示图标,一般用在toolBar上

#include <QToolButton>
#include <QStyle>

    auto toolBtn = new QToolButton(this);
    toolBtn->resize(100,50);
    toolBtn->setIcon(style()->standardIcon(QStyle::SP_DriveFDIcon));//设置系统提供的标准图标
    toolBtn->setText("工具按钮");//设置文本,但是不会显示,因为默认是隐藏的
    toolBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);//设置文本显示,跟在图标后
    toolBtn->setArrowType(Qt::UpArrow);//图标改成向上的箭头
    toolBtn->setMenu(menu);//设置菜单,但默认不显示,要设置
    toolBtn->setPopupMode(QToolButton::MenuButtonPopup);//设置菜单下拉按钮生效

3.单选按钮(RadioButton)

#include <QRadioButton>
    auto radioBtn1 = new QRadioButton("男",this);
    radioBtn1->move(100,100);
    auto radioBtn2 = new QRadioButton("女",this);
    radioBtn2->move(200,100);
    //radioBtn1->setCheckable(false);//设置可选中,默认是可选中(true)
    radioBtn2->setChecked(true);//设置初始已选中

4.复选框(CheckBox)

#include <QCheckBox>
    auto ckBtn1 = new QCheckBox("猫",this);
    auto ckBtn2 = new QCheckBox("狗",this);
    auto ckBtn3 = new QCheckBox("兔",this);
    ckBtn1->move(100,200);
    ckBtn2->move(200,200);
    ckBtn3->move(300,200);
    connect(ckBtn1,&QCheckBox::checkStateChanged,[=](Qt::CheckState state ){
        qInfo()<< state;//显示选中状态
    });
    ckBtn2->setCheckable(false);//设置不能选中

5.行编辑器(LineEdit)

#include <QLineEdit>
    auto lineEdt=new QLineEdit("123",this);
    lineEdt->move(120,10);
    connect(lineEdt,&QLineEdit::textChanged,[=](QString txt){
        qInfo()<<txt;//文本改变,就输出改变后的文本
    });
    connect(lineEdt,&QLineEdit::cursorPositionChanged,[=](int oldPos,int newPos){
        qInfo()<<"光标从"<<oldPos<<"移动到"<<newPos;//光标在文本里的位置改变,一个字符(中文也一样)一个位置,初始没选中是-1,光标在最前面是0
    });
    connect(lineEdt,&QLineEdit::editingFinished,[=]{
        qInfo()<<"编辑完成";//按下enter或者失去焦点,编辑即完成
        lineEdt->selectAll();//选中文本
        lineEdt->copy();//文字复制到剪贴板,如果没选中,就无效
    });
    // lineEdt->setEchoMode(QLineEdit::Password);//设置密码输入模式
    lineEdt->setEchoMode(QLineEdit::PasswordEchoOnEdit);/*编辑的时候正常,焦点离开变成小黑点 */
    lineEdt->setClearButtonEnabled(true);//后面带个×,点击可以清除已输入文字
  • 设置输入掩码
掩码字符含义
AASCII字母字符是必须的,A-Z,a-z
aASCII字母字符是允许,但不是必须的
NASCII字母字符是必须的,A-Z,a-z,0-9
nASCII字母字符是允许,但不是必须的
X任何字符都可以,是必须的
x任何字符都可以,但不是必须的
9ASCII数字是必须的,0-9
0ASCII数字是允许,但不是必须的
DASCII数字是必须的,1-9
dASCII数字是允许,但不是必须的
#ASCII数字或加减符号是允许的,但不是必须的
H16进制数据字符是必须的,A-F,a-f,0-9
h16进制数据字符是允许的
B二进制数据字符是必须的,0-1
b~
>所有字符字母都是大写的
<都小写
!关闭大小写
:c终止输入掩码,并将空白字符设置为c
\使用\去转义上面的字符,如果再需要显示上述字符的时候
#include <QIntValidator>
#include <QDoubleValidator>
#include <QRegularExpressionValidator>
	lineEdt->setInputMask(">NNNN-NNNN-NNNN");//设置输入格式,秘钥
	lineEdt->setInputMask("9999-99-99");//设置输入格式,年月日
  
  	lineEdt->setValidator(new QIntValidator(100,999,this));//设置验证器,大于100(但是输入1位2位都可以),小于999
  	lineEdt->setValidator(new QDoubleValidator(10.0,99.1,2,this));//浮点数限定,最小10.0,最大设置好像无效
    lineEdt->setValidator(new QRegularExpressionValidator(QRegularExpression("[1-9]\\d{7,10}@qq\\.com")));//QQ邮箱正则
    lineEdt->addAction(QPixmap(":/C:/Users/PVer/Pictures/Resource/wendi.bmp"),QLineEdit::LeadingPosition);//在左边添加一个温迪的图标

6.标签(Label)

#include <QLabel>
    auto lab = new QLabel;
    lab->show();
    lab->resize(400,300);
    lab->move(200,100);
    lab->setWindowTitle("lable");
    lab->setPixmap(QPixmap(":/C:/Users/PVer/Pictures/Resource/wendi.bmp"));
    lab->setScaledContents(true);//让图片填满控件,进行缩放
   
    lab->setText("谁谁谁ggggggggggggggggg");
    lab->setAlignment(Qt::AlignCenter);//设置对齐方式,居中
    lab->setFixedWidth(10);//设置固定宽度
    lab->setWordWrap(true);//设置自动换行
    lab->setText("<a href=\"www.csdn.net\">csdn</a>");//可以设置超链接,需要通过信号处理
    connect(lab,&QLabel::linkHovered,[]{
        qInfo()<<"www.csdn.net";
    });//鼠标悬停
    connect(lab,&QLabel::linkActivated,[]{
        qInfo()<<"正在打开网页...";
    });

    //设置动画并播放
    auto mov = new QMovie(":/C:/Users/PVer/Pictures/Resource/zhutou.gif");
    lab->setMovie(mov);
    mov->start();

设置伙伴

#include <QGridLayout>
    QLabel* nameLabel= new QLabel("&Name姓名",this);//&后面跟英文字母,可以用快捷键alt+N快速切换到绑定的lineEdit
    QLineEdit* nameEdit = new QLineEdit;
    nameLabel->setBuddy(nameEdit);

    QLabel* phoneLabel= new QLabel("电话(&P)",this);
    QLineEdit* phoneEdit = new QLineEdit;
    phoneLabel->setBuddy(phoneEdit);

    QGridLayout* gLayout= new QGridLayout;
    gLayout->addWidget(nameLabel,0,0);
    gLayout->addWidget(nameEdit,0,1);
    gLayout->addWidget(phoneLabel,1,0);
    gLayout->addWidget(phoneEdit,1,1);

    auto w = new  QWidget;
    w->setLayout(gLayout);
    w->show();

7.分组框(GroupBox)

#include <QGroupBox>
    QGroupBox* box=new QGroupBox("box",this);
    box->move(300,0);
    QGroupBox* box1=new QGroupBox("box1",this);
    box1->move(400,0);
    auto radioBtn3 = new QRadioButton("公");
    auto radioBtn4 = new QRadioButton("母");
    QVBoxLayout* v1= new QVBoxLayout(box);
    QVBoxLayout* v2= new QVBoxLayout(box1);
    v1->addWidget(radioBtn1);
    v1->addWidget(radioBtn2);
    v2->addWidget(radioBtn3);
    v2->addWidget(radioBtn4);
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yerennuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值