【Qt 窗口部件】QFrame类族、按钮等其他部件

Qt_creator 专栏收录该内容
4 篇文章 0 订阅

一、QFrame类族

         \;\;\;\; QFrame类是带有边框的部件的基类,它的子类有最为常用的标签部件QLabel、QLCDNumber、QSplitter、QStackedWidget、QToolBox和QAbstractScrollArea类。QAbstractScrollArea类是所有带有滚动区域的部件类的抽象基类,其子类中最常用的文本编辑器类QTextEdit类和各种项目视图类。这里结合实际应用介绍各子类的用法。

1. QLabel

         \;\;\;\; 标签QLabel部件用来显示文本或者图片。在ui界面中拖入一个Label,可以设置其对齐方式为alignment属性,水平为AlignHCenter,垂直为AlignVCenter使Label中的文本显示在正中间。勾选属性栏中的wordWrap,可以实现文本的自动换行。而要在标签中插入图片,需要包含头文件< QPixmap >,然后在MyWidget类的构造函数中添加一行代码:
         \;\;\;\; ui->label->setsetPixmap(QPixmap(“F:/logo.png”));

         \;\;\;\; 这样就可以在标签中显示绝对路径F盘中的“logo.png”图片了,也可以使用资源管理器这种方法可以在外部图片的位置发生变化时依旧正常运行。步骤如下:

         \;\;\;\; 添加Qt资源文件。即在工程同名文件夹下新建一个名为images的文件夹放入“logo.png”图片,然后在Qt creator中新建一个 myImage 的资源文件(新建文件 - Qt类 - Qt Resource File),然后得到一个myImage.qrc 文件。
         \;\;\;\; 添加资源。在qrc文件的资源管理界面“添加前缀”,在下方属性栏中修改前缀为“/myImage”,再“添加文件”,选中先前创建的images文件夹,在选中其中的图片即可。这是在myImage.qrc 文件中就出现了添加的图片列表。(注意保存)
         \;\;\;\; 使用资源。在编写代码时使用“logo.png”图片,可以将其路径指定为“:/myImage/images/logo.png”,这样就表明在使用资源文件中的图片,其中添加的前缀“/myImage”只是用来表明这是图片资源,可以改为别的名字,也可以不使用。

         \;\;\;\; 在QLabel中还可以显示gif动态图片,包含头文件后,在MyWidget类构造函数中添加如下代码:
         \;\;\;\; QMovie *movie = new QMovie(“F:/donghua.gif”);
         \;\;\;\; ui->label->setMovie(movie);
         \;\;\;\; movie->start();

2. QLCDNumber

         \;\;\;\; QLCDNumber部件可以让数码显示与液晶数字一样的效果

从部件栏中拖一个LCD Number部件到界面上,其属性分别代表:
①选中smallDecimalPoint,可以显示小数点;
②numDigits 和 digitCount 的作用都是设置显示的数字个数,设置它们其中一个为7即表示要显示7个数字;
③mode表示显示数字的进制,十进制(Dec)、八进制(Oct)、十六进制(Hex)和二进制(Bin);
④segmentStyle用来设置数码的显示样式,通常选择Filled 填充;
⑤最后设置要显示的值value,也可以在代码中使用display()函数来设置value。

3. QToolBox
         \;\;\;\; QToolBox 部件提供了一列层叠窗口部件,就像最常用的聊天工具QQ中的抽屉效果。在ui界面选择Tool Box拖入其中,在其上右击选择“插入页 - 在当前页之后”菜单项来插入一页,然后更改其frameShape属性为Box,并分别单击各页的标签,更改其currentItemText分别为“好友”,“黑名单”,“陌生人”,运行程序即可查看效果。

二、按钮部件
         \;\;\;\; QAbstractButton类是按钮部件的抽象基类,提供了按钮的通用功能。它的子类包括复选框QCheckBox、标准按钮QPushButton、单选框QRadioButton和工具按钮QToolButton。

1. QPushButton

         \;\;\;\; QPushButton 部件提供了一个标准按钮。在ui界面中拖入3个Push Button,将它们的objectName依次更改为pushBtn1、pushBtn2、pushBtn3。选中pushBtn1的checkable属性,使得它拥有“选中”和“未选中”两种状态;再选中pushBtn2的flat属性,这样可以不显示该按钮的边框。然后右击进入pushBtn1的toggled(bool)信号槽,更改如下:

void MyWidget::on_pushBtn1_toggled(bool checked){
 		//checked 表明按钮是否处于被按下状态,当pushBtn1被按下时为true,否则为false
 		qDebug() << tr("按钮是否按下") << checked;
 	}//注意添加头文件<QDebug>

然后在MyWidget类的构造函数中添加代码:(注意添加头文件< QMenu >)

	ui->pushBtn1->setText(tr("&nihao"));
 	ui->pushBtn2->setText(tr("帮助(&H)"));
 	ui->pushBtn2->setIcon(QIcon("../image/help.png"));
 	ui->pushBtn3->setText(tr("z&oom"));
 	QMenu *menu = new QMenu(this);
 	menu->addAction(QIcon("../image/zoom - in.png"), tr("放大") );
 	ui->pushBtn3->setMenu(menu);

在代码里为3个按钮改变了显示文本,这里在一个字母前加上"&“符号,就可以将这个按钮的加速键设置为Alt加上这个字母;要在文本中显示”&“符号本身,那么可以使用”&&"。也可以使用setIcon()函数来给按钮添加图片。对于pushBtn3,为其添加了下拉菜单,虽然没有加入具体的实现。

2.QCheckBox、QRadioButton、QGroupBox

         \;\;\;\; 对于调查表之类的应用,往往提供多个选项供选择,有些是可以选择多项的,有些只能选择其中一项。复选框QCheckBox类提供了同时选择多项的功能,而QRadioButton提供了只能选择一项的功能,一般要把一组按钮放到一个QGroupBox中来进行管理。在这里不做过多介绍,已在QCheckBox文章中详细介绍。

三、行编辑器

         \;\;\;\; 行编辑器QLineEdit部件是一个单行的文本编辑器,允许用户输入和编辑单行的纯文本内容,而且提供了一系列有用的功能,包括撤销与恢复、剪切和拖放等操作。其中剪切复制等功能是行编辑自带的,不用自己编码实现。在ui界面中拖入4个LineEdit, 然后将4个LineEdit从上到下依次更改其objectName为lineEdit1、lineEdit2、lineEdit3、lineEdit4。

1. 显示模式
         \;\;\;\; 行编辑器QLineEdit有4种显示模式(echoMode),可以在echoMode属性中更改它们,分别是:Normal正常显示输入的信息,NoEcho不显示任何输入(保证不泄露输入的字符位数),Password显示为密码样式(以小黑点或星号之类的字符代替输入的字符),PasswordEchoOnEdit在编辑时显示正常字符,其他情况下显示为密码样式。

2. 输入掩码
         \;\;\;\; QLineEdit提供了输入掩码(inputMask)来限制输入的内容。可以使用一些特殊的字符来设置输入的格式和内容,这些字符中有的起限制作用且必须要输入一个字符,而有的只是起限制作用,但可以不输入字符而是以空格代替。在这里插入图片描述

将lineEdit2的inputMask属性设置为“>AA-90-bb-!aa#H; ∗ * ”,其含义为:
①“>”号表明后面输入的字母自动转为大写;
②“AA”表明开始必须输入两个字母,因为有前面“>”号的作用,所以输入的这两个字母自动变为大写;
③“-”号为分隔符,直接显示,表示该位不可输入;
④“9”表示必须输入一个数字; “0”表示输入一个数字,或者留空;
⑤“bb”表示这两位可以留空,或者输入两个二进制字符,即0或1;
⑥ “!”表明停止大小写转换,就是在最开始的“>”号不再起作用;
⑦“aa”表示可以留空,或者输入两个字母;
⑧“#”表示将“#”号作为分隔符,因为“#”号在这里有特殊含义,所以前面要加上“\”号;
⑨“H”表明必须输入一个十六进制的字符,
⑩“; ∗ * ”表示用“*”号来填充空格。也可以使用setInputMask()函数在代码中来设置输入掩码。

在lineEdit2上右击然后转到它的returnPressed()回车键按下信号的槽中,更改如下:

void MyWidget::on_lineEdit2_returnPressed(){
		ui->lineEdit3->setFocus();				//让lineEdit3获得焦点
		qDebug() << ui->lineEdit2->text();		//输出lineEdit2的内容
		qDebug() << ui->lineEdit2->displayText();//输出lineEdit2显示的内容
}

3. 输入验证
         \;\;\;\; 在QLineEdit中还可以使用验证器(validator)来对输入进行约束。它使用起来很简单,在MyWidget类的构造函数中添加如下代码:

//新建一个验证器,指定范围为100~999
QValidator	*validator = new QIntValidator(100, 999, this); 
//在行编辑器中使用验证器
ui->lineEdit3->setValidator(validator);

         \;\;\;\; 在代码中为lineEdit3添加了验证器,那么它现在只能输入100~999之间的数字,现在再进入lineEdit3的回车键按下信号槽中输出lineEdit3的内容,然后运行程序会发现,其他的字符无法输入,而输入小于100的数组按下回车键也不会触发信号槽。

4. 自动补全
         \;\;\;\; 在QLineEdit中提供了强大的自动补全功能,这是利用QCompleter类实现的,在MyWidget类的构造函数中继续添加代码:(注意添加< QCompleter >头文件)

QStringList wordList;
wordList << "Qt" << "Qt Creator" << tr("你好");
QCompleter *completer = new QCompleter(wordList, this);//新建自动完成器
completer->setCaseSensitivity(Qt::CaseInsensitive);//设置大小写不敏感
ui->lineEdit4->setCompleter(completer);

五、数值设定框
         \;\;\;\; QAbstractSpinBox类是一个抽象基类,提供了一个数值设定框和一个行编辑器来显示设定值。它有3个子类QDateTimeEdit、QSpinBox、QDoubleSpinBox分别用来完成日期时间、整数和浮点数的设定。

1. QDateTimeEdit
         \;\;\;\; QDateTimeEdit类提供了一个可以编辑日期和时间的部件。
           \;\;\;\;\; 从部件栏分别拖入一个Time Edit、Date Edit 和 Date/Time Edit到界面上,然后设置timeEdit的displayFormat为“h:mm:ssA”这样就可以使用12小时制来显示日期。选中dateEdit的calendarPopup属性就可以使用弹出的日历部件来设置日期。
           \;\;\;\;\; 这需要在MyWidget类的构造函数中添加代码:

//设置时间为现在的系统时间
ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime());
//设置时间的显示格式
ui->dateTimeEdit->setDisplayFormat(tr("yyyy年MM月dd日 ddd HH时 mm分 ss秒"));
//y表示年,M表示月,d表示日;
//ddd表示星期,H表示小时(24小时制),h也表示小时,如果最后有AM或者PM,则是12小时制显示否则仍为24小时制;
//m表示分,s表示秒,z可以用来表示毫秒。

2. QSpinBox 和 QDoubleSpinBox
         \;\;\;\; QSpinBox用来设置整数,QDoubleSpinBox用来设置浮点数。

spinBox属性:
①后缀suffix属性,可以设置为“%”,这样就可以显示百分数;
②前缀prefix属性,比如表示金钱时前面有“¥”字符;
③最小值minimum属性,设置其最小值; 最大值maximum属性设置其最大值;
④单步值singleStep属性设置每次增加的数值,默认为1;
⑤value为现在显示的数值。
⑥而doubleSpinBox增加了一个小数位数decimals属性,用来设置小数点后面的位数。

六、滑块部件
         \;\;\;\; QAbstractSlider类提供了一个区间内的整数值,有一个滑块,可以定位到一个整数区间的任意值。它有三个子类QScrollBar、QSlider和QDial。其中,滚动条QScrollBar更多用在QScrollArea类中来实现滚动区域;而QSlider是最常见的音量控制或多媒体播放进度等滑块; QDial是一个刻度表盘。
         \;\;\;\; 从部件栏中拖入Dial、Horizontal Scroll Bar 和 Vertical Scroll Bar、Horizontal Slider以及Vertical Slider等部件。

这里解释一下两个Scroll Bar的属性
①maximum、minimum分别用来设置最大、最小值;
②singleStep属性是每步的步长,默认为1,pageStep是每页的步长,默认为10;
③value与sliderPosition是当前值;
④tracking是设置是否跟踪,默认为是,即在拖动滑块时,没移动一个刻度都会发射valueChanged()信号,若选择否,则只有拖动滑块释放时才发射该信号;
⑤orientation是设置部件的方向,有水平和垂直两种选择;
⑥invertedAppearance属性是设置滑块所在的位置,默认在最左端,选中后在最右端。
⑦invertedControls是设置反向控制。
除此之外,slider特有的属性:tickPosition用来设置显示刻度的位置,默认是不显示刻度;tickInterval用来设置刻度的间隔。
dial特有属性:wrapping用来设置是否首位相连,默认开始与结束是分开的;notchTarget用来设置刻度之间的间隔;属性notchesVisible用来设置是否显示刻度。

         \;\;\;\; 再往界面上拖入一个SpinBox,进入信号和槽编辑界面,将刻度表盘部件dial的sliderMoved(int)信号分别与其他各个部件的setValue(int)槽相连接,设置完成后运行程序,当使用鼠标拖动刻度盘部件的滑块时,可以看到其他所有的部件都跟着变化了。

  • 1
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值