目录
1.Label2.LCD Number3.ProgressBar4.Calendar Widget
1.Label
QLabel可以用来显示文本和图片核心属性:
text:
QLabel中的
⽂本textFormat:
⽂本的格式 Qt::PlainText:纯文本
Qt::RichText:富文本(支持html标签)
Qt::MarkdownText:markdown格式
Qt::AutoText:根据文本内容自动决定文本格式
pixmap:
QLabel内部
包含的图片scaledContents:是否内容
自动拉伸填充QLabel,
true/falsealignment:
对齐方式,可设置水平和垂直方向如何对齐
wordWrap:内部
文本是否自动换行,
true/falseindent:
设置文本缩进,水平和垂直方向都生效 最多只有两个方向有效,具体哪两个方向取决于
alignment margin:内部
文本和边框之间的边距 不同于
indent,但是是上下左右四个方向都同时有效
openExternalLinks:是否
允许打开⼀个外部的链接 QLabel文本内容包含url的时候涉及到
buddy:
给QLabel关联⼀个"伙伴",这样点击
QLabel时就能激活对应的伙伴
例如:伙伴是⼀个
QCheckBox,那么该
QCheckBox就会被选中
QLabel可以通过
buddy指定快捷键 此处的快捷键的规则功能上要比
QPushButton弱很多是在文本中使用
&跟上一个字符来表示快捷键
例如:
&A -> 通过键盘上的
alt + a来触发这个快捷键
QFrame是
QLabel的父类,其中
frameShape属性用来设置边框性质
QFrame::Box:矩形边框
QFrame::Panel:带有可点击区域的面板边框
QFrame::WinPanel:Windows⻛格的边框
QFrame::HLine :⽔平线边框
QFrame::VLine :垂直线边框
QFrame::StyledPanel :带有可点击区域的⾯板边框,但样式取决于窗⼝主题
如何让一个控件大小随着窗口大小变化? 在
Widget中重写
resizeEvent()实现
// 重写resizeEvent(),这个函数会在窗⼝⼤⼩发⽣改变时被⾃动调⽤void Widget::resizeEvent(QResizeEvent *event){// 可以直接通过this->width()和this->height()设置label新的尺⼨// ui->label->setGeometry(0, 0, this->width(), this->height());// 也可以通过event参数拿到新的尺寸ui->label->setGeometry(0, 0, event->size().width(), event >size().height());}
此处的
resizeEvent()没有手动调用,但是能在窗口大小变化时自动被调用 这个过程依赖C++中的多态来实现的Qt框架内部管理着
QWidget对象表⽰窗口,在窗口大小发生改变时,Qt会自动调用
resizeEvent()但是由于实际上这个表⽰窗⼝的并⾮是
QWidget,⽽是
QWidget的⼦类,也就是程序员自己是实现的
Widget,此时虽然是通过父类调用函数,但是实际上执行的是子类的函数(重写后的
resizeEvent())此处属于是多态机制的⼀种经典⽤法,通过上述过程,就可以把⾃定义的代码插⼊到框架内部执⾏,相当于"注册回调函数"
2.LCD Number
QLCDNumer是⼀个专⻔⽤来
显⽰数字的控件,类似于"⽼式计算器"的效果
核心属性:
intValue:
QLCDNumber显⽰的数字值(
int)
value:
QLCDNumber显⽰的数字值(
double) 和
intValue是联动的
例如:给
value设为1.5,
intValue的值就是2 设置
value和
intValue的⽅法名字为
display,⽽不是
setValue或者
setIntValue digitCount:显⽰⼏位数字
mode:数字显⽰形式
QLCDNumber::Dec :⼗进制模式 只有十进制的时候才能显示小数点后的内容
QLCDNumber::Hex :⼗六进制模式
QLCDNumber::Bin :⼆进制模式
QLCDNumber::Oct :⼋进制模式
segmentStyle:设置显⽰⻛格
QLCDNumber::Flat:平⾯的显⽰⻛格,数字呈现在⼀个平坦的表⾯上
QLCDNumber::Outline:轮廓显⽰⻛格,数字具有清晰的轮廓和阴影效果
QLCDNumber::Filled:填充显⽰⻛格,数字被填充颜⾊并与背景区分开
smallDecimalPoint:设置⽐较⼩的⼩数点
示例:定时器
QTimer:定时器,通过
start()启动之后,就会每隔一定周期,触发一次
QTimer::timeour信号使⽤
connect把
QTimer::timeout信号和
Widget::UpdateTime连接起来,意味着每次触发
QTimer::timeout都会执⾏
Widget::UpdateTime // UpdateTime()实现{void Widget::UpdateTime(){int value = ui->lcdNumber->intValue();if(value <= 0){timer->stop();return;}ui->lcdNumber->display(value - 1);}}// 功能实现{// 创建QTimertimer = new QTimer(this);// 连接信号槽,每次触发timeout信号都会伴随updateTime()执行connect(timer, &QTimer::timeout, this, &Widget::UpdateTime);// 启动Qtimer,并且桂东每个1000ms触发一次timeout信号timer->start(1000);}
3.ProgressBar
QProgressBar表示一个
进度条核心属性:
minimum:进度条最小值
maxinum:进度条最大值
value:进度条当前值
alignment:文本在进度条中的对齐方式
Qt::AlignLeft:左对⻬
Qt::AlignRight:右对⻬
Qt::AlignCenter:居中对⻬
Qt::AlignJustify:两端对⻬
textVisible:进度条的数字是否可见
orientation:进度条的方向是水平还是垂直
invertAppearance:是否朝反方向增长进度
textDirection:文本的朝向
format:展示的数字格式
%p:百分比
%v:数值
%m:剩余时间(以ms为单位)
%t:总时间(以ms为单位)
示例:设置进度条按时间增长 实际开发中,进度条的取值,往往是根据当前任务的实际进度来进⾏设置的
例如:需要读取⼀个很⼤的⽂件,就可以获取⽂件的总⼤⼩,和当前读取完毕的⼤⼩,来设置进度条的⽐例 由于Qt禁⽌在其他线程修改界⾯,因此进度条的更新往往也是需要搭配定时器来完成的 通过定时器周期触发信号,主线程调⽤对应的slot函数再在slot函数中对当前的任务进度进⾏计算,并更新进度条的界⾯效果
// UpdateProgressBar()实现{void Widget::UpdateProgressBar(){int value = ui->progressBar->value();if(value >= 100){timer->stop();return;}ui->progressBar->serValue(value + 1);}}// 功能实现{timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &Widget::UpdateProgressBar);timer->start(100);}
4.Calendar Widget
QCalendarWidget表⽰⼀个
“⽇历”核心属性:
selectDate:当前选中的日期
minimumData:最小日期
maximumData:最大日期
firstDayOfWeek:每周的第一天(日历第一列)是周几
gridVisible:是否显示表格的边框
selectionMode:是否允许选择日期
navigationBarVisible:日历上方标题是否显示
horizontalHeaderFormat:⽇历上⽅标题显⽰的⽇期格式
verticalHeaderFormat:⽇历第⼀列显⽰的内容格式
dateEditEnabled:是否允许⽇期被编辑
重要信号:
selectionChanged(const QDate&):当选中的⽇期发⽣改变时发出
activated(const QDate&):当双击⼀个有效的⽇期或者按下回⻋键时发出 形参是⼀个QDate类型,保存了选中的⽇期
currentPageChanged(int, int):当年份⽉份改变时发出 形参表⽰改变后的新年份和⽉份