> 文档中心 > Qt学习笔记(4)

Qt学习笔记(4)

目录

一.普通按钮(PushButton)

 二.工具按钮(ToolButton)

三.单选按钮(RadioButon)

四.复选框(CheckBox)

五.行编辑器(LineEdit)

设置显示模式:

 设置掩码:

 设置验证器:

设置图标:

六.标签(Label)


一.普通按钮(PushButton)

它的应用十分广泛,信号继承于父类QAbstractButton,槽函数也基本跟父类的一致。

下面介绍四个常用信号:

void Widget::pushButton(){    auto* btn = new QPushButton("open",this);    btn->setText("lala");    connect(btn,&QPushButton::clicked,this,[](){ qDebug()<<"clicked";    });    connect(btn,&QPushButton::pressed,this,[](){ qDebug()<<"pressed";    });    connect(btn,&QPushButton::released,this,[](){ qDebug()<setCheckable(true);//选中时背景会变色,默认没选中    //可以使默认选中    btn->setChecked(true);    //toggled信号:每当切换按钮改变其状态时,就会发出此信号。    connect(btn,&QPushButton::toggled,this,[](bool click){ qDebug()<<"toggled"<<click;    });}

按钮也可以设置菜单:

//可以设置菜单QMenu* menu = new QMenu(btn);menu->addAction("open");btn->setMenu(menu);connect(menu,&QMenu::triggered,this,[=](QAction*act){    btn->setText(act->text());});

其他一些常用函数:

序号 函数&描述
1 int void setAutoDefault(bool)
设为自动默认按钮,按下Enter键时会自动按下按钮
2 void setDefault(bool)
设为自动默认按钮,按下Enter键时会自动按下按钮
3 void setFlat(bool)
去掉按钮的边框,让PushButton按钮跟背景色融为一体,在点击按钮时,会出现原来按钮背景。
4 void setMenu(QMenu *menu)
设置菜单。 这将把按钮变成一个菜单按钮,在某些样式中,它将在按钮文本的右侧产生一个小三角形。

 二.工具按钮(ToolButton)

工具按钮主要是用来显示图标,很好用,也可以文字图标一起显示。

使用方式在代码中体现了

void Widget::toolButton(){    auto* toolBtn = new QToolButton(this);    toolBtn->setText("hello");    //自定义图标    toolBtn->setIcon(QIcon(":/new/prefix1/ico/phone.ico"));    //系统图标,要包含qstyle头文件,QStyle::StandardPixmap类    toolBtn->setIcon(style()->standardIcon(QStyle::StandardPixmap::SP_FileIcon));    toolBtn->setFixedSize(64,64);    toolBtn->setIconSize(QSize(64,64));    //自适应    toolBtn->setIconSize(toolBtn->size());    toolBtn->setIconSize(toolBtn->size()/2);    //设置文本位置,枚举,Qt::ToolButtonStyle类    toolBtn->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextUnderIcon);    toolBtn->setArrowType(Qt::ArrowType::UpArrow);    //去掉边框和背景,鼠标在按钮上面时,显示选中效果,按下时有下沉效果    toolBtn->setAutoRaise(true);}
序号 函数&描述
1 void setPopupMode(QToolButton::ToolbuttonPopupMode mode)
描述如何将弹出菜单与工具按钮一起使用,默认设置为DelayedPopup 

三.单选按钮(RadioButon)

经典的多选一,比较常用的是多组单选按钮的管理:

void Widget::radioButton(){    //选择单选题    QRadioButton* catrBtn = new QRadioButton("猫",this);    auto dogrBtn = new QRadioButton("狗",this);    dogrBtn->move(0,30);    catrBtn->move(0,60);    connect(catrBtn,&QRadioButton::toggled,this,[](bool click){ qDebug()<move(200,0);    mes1->move(200,30);    mes2->move(200,60);    mes3->move(200,90);    box->move(200,0);}

四.复选框(CheckBox)

用法跟单选按钮差不多,也是要学会分组:

void Widget::checkBox(){    //多选    //一组选择,会放在一个组框里面    auto group = new QGroupBox("你喜欢哪些运动",this);    group->setFixedSize(300,300);    //往框里面添加复选按钮    auto Cb1 = new QCheckBox("篮球",group);    auto Cb2 = new QCheckBox("足球",group);    auto Cb3 = new QCheckBox("乒乓球",group);    auto Cb4 = new QCheckBox("网球",group);    //使用布局    auto vlayout = new QVBoxLayout(group);    vlayout->addWidget(Cb1);    vlayout->addWidget(Cb2);    vlayout->addWidget(Cb3);    vlayout->addWidget(Cb4);}

五.行编辑器(LineEdit)

几个常用的信号测试如下:

void Widget::lineEdit(){    //行编辑器    auto lineEdit = new QLineEdit(this);    connect(lineEdit,&QLineEdit::cursorPositionChanged,this,[=](){//获取编辑器的文本 qDebug()<<"cursorPositionChanged"<text();    });    //编辑完成信号,按回车即可触发    connect(lineEdit,&QLineEdit::editingFinished,this,[=](){ qDebug()<<"editingFinished"<text();    });    //拒绝输入时触发    connect(lineEdit,&QLineEdit::inputRejected,this,[=](){ qDebug()<<"inputRejected"<text();    });    //当按下return或者enter且有焦点时会触发    connect(lineEdit,&QLineEdit::returnPressed,this,[=](){ qDebug()<<"returnPressed"<text();    });    //选择文本时能触发    connect(lineEdit,&QLineEdit::selectionChanged,this,[=](){ qDebug()<<"selectionChanged"<text();    });    //文本改变    connect(lineEdit,&QLineEdit::textChanged,this,[](){ qDebug()<<"textChanged";    });    //文本编辑    connect(lineEdit,&QLineEdit::textEdited,this,[](){ qDebug()<setText("...");    qDebug()<text();}

还有几个常见的槽函数:

void clear()      //清除行编辑的内容void copy() const  //将选中的文本复制到剪贴板(如果有的话),并且echoMode()是Normalvoid cut()   //剪切void paste()      //粘贴void redo()   //撤销void selectAll()  //选中所有void setText(const QString &)void undo()   //反撤销

 常见的登陆界面少不了它的应用,其中还有设置显示模式,辅助设计:

设置显示模式:

edit->setEchoMode(QLineEdit::EchoMode::Password);QLineEdit::Normal  //显示输入的字符,这是默认值。  QLineEdit::NoEcho  //不要显示任何东西QLineEdit::Password  //显示与平台相关的密码掩码字符,而不是实际输入的字符。  QLineEdit::PasswordEchoOnEdit    //在编辑时显示已输入的字符,完成显示掩码字符edit->setClearButtonEnabled(true);    //启用清除按钮

 设置掩码:

    //设置掩码,限定输入模式    edit->setText(QDate::currentDate().toString("yyyy-MM-dd"));    //edit->setInputMask("9999-99-99");    edit->setInputMask(">AAAA-AA-AA");

常见掩码总结:

掩码字符 含义
A ASCII字母字符是必须的,A-Z,a-z
a ASCII 字母字符是允许的但不是必须的
N ASCII字母字符是必须的,A-Z,a-z, 0-9
n ASCII 字母字符是允许的但不是必须的
X 任何字符都可以,是必须需要的
x 任何字符都允许的,但不是必须需要的
9 ASCII 数字是必须要的,0-9
0 ASCII 数字是允许的,但不是必须要的
D ASCII 数字是必须要的,1-9
d ASCII 数字是允许的,但不是必须要的
# ASCII 数字是或加减符号允许的,但不是必须要的
H 十六进制数据字符是必须要的,A-F, a-f, 0-9
h 十六进制数据字符是允许的,但不是必须要的
B 二进制数据字符是必须要的,0-1
b 二进制数据字符是允许的,但不是必须要的
> 所有的字符字母都都大写的
< 所有的字符字幕都是小写的
! 关闭大小写
;c 终止输入掩码并将空白字符设置为c
\ 使用 \ 去转义上面的字符,如果再需要显示上述字符的时候

 设置验证器:

    //设置验证器    //只能输入整数    //三位数    edit->setValidator(new QIntValidator(0,100,edit));    //只能输入浮点数,但是浮点数验证器不能限制范围,可以随便输入    edit->setValidator(new QDoubleValidator(-90.0,90.0,3,this));

设置图标:

    auto edit = new QLineEdit(this);    //添加动作, 把图标加在前面    auto act1 = edit->addAction(QIcon(":/new/prefix1/ico/phone.ico"),QLineEdit::ActionPosition::LeadingPosition);    //加在后面,图标都是能点的,有信号返回值    auto act2 = edit->addAction(QIcon(":/new/prefix1/ico/phone.ico"),QLineEdit::ActionPosition::TrailingPosition);    connect(act2,&QAction::triggered,edit,&QLineEdit::clear);

六.标签(Label)

常用信号:

//当用户点击链接时会发出此信号。void linkActivated(const QString &link)//当用户将鼠标悬停在链接上时会发出此信号。    void linkHovered(const QString &link)

常用槽:

void clear()void setMovie(QMovie *movie)void setNum(double num)void setNum(int num)void setPicture(const QPicture &picture)void setPixmap(const QPixmap &)void setText(const QString &)

常用设置:字体位置,超链接,快捷键(设置伙伴): 

void Widget::lable(){    //QLable 标签:用来显示文本或图片    QLabel* lab1 = new QLabel("我是lable",this);    lab1->setFixedSize(200,100);    lab1->setStyleSheet("background-color:green;color:white");    //设置字体位置, 都是枚举类型    lab1->setAlignment(Qt::AlignmentFlag::AlignVCenter);    //当文本超过固定宽度后自动换行    lab1->setWordWrap(true);    //设置超链接    QLabel* lab2 = new QLabel("百度一下",this);    lab2->move(100,200);    //设置自动打开浏览器    lab2->setOpenExternalLinks(true);    //自己手动处理,不能设置自动打开    connect(lab2,&QLabel::linkActivated,this,[](){ qDebug()<addWidget(nameLable,0,0);    glayout->addWidget(nameEdit,0,1);    glayout->addWidget(userLable,1,0);    glayout->addWidget(userEdit,1,1);    //把nameEdit设置为nameLable的伙伴    nameLable->setBuddy(nameEdit);    userLable->setBuddy(userEdit);}

还可以显示图片甚至动图:

void Widget::lableShowImage(){    //显示图片    auto lab = new  QLabel(this);    lab->setPixmap(QPixmap(":/new/prefix1/ico/phone.ico"));    //固定大小,可能会显示不完整    lab->setFixedSize(200,200);    //让图片自适应lable大小    lab->setScaledContents(true);    //显示gif图片    auto labGif = new QLabel(this);    labGif->move(0,200);    auto movie = new QMovie(":/new/prefix1/ico/label_gif.gif");    labGif->setMovie(movie);    movie->start();}