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