[Qt][显示类控件]详细讲解


1.Label

  • QLabel可以用来显示文本和图片
  • 核心属性
    • textQLabel中的⽂本
    • textFormat⽂本的格式
      • Qt::PlainText:纯文本
      • Qt::RichText:富文本(支持html标签)
      • Qt::MarkdownText:markdown格式
      • Qt::AutoText:根据文本内容自动决定文本格式
    • pixmapQLabel内部包含的图片
    • scaledContents:是否内容自动拉伸填充QLabeltrue/false
    • alignment对齐方式,可设置水平和垂直方向如何对齐
    • wordWrap:内部文本是否自动换行true/false
    • indent设置文本缩进,水平和垂直方向都生效
      • 最多只有两个方向有效,具体哪两个方向取决于alignment
    • margin:内部文本和边框之间的边距
      • 不同于indent,但是是上下左右四个方向都同时有效
    • openExternalLinks:是否允许打开⼀个外部的链接
      • QLabel文本内容包含url的时候涉及到
    • buddyQLabel关联⼀个"伙伴",这样点击QLabel时就能激活对应的伙伴
      • 例如:伙伴是⼀个QCheckBox,那么该QCheckBox就会被选中
      • QLabel可以通过buddy指定快捷键
        • 此处的快捷键的规则功能上要比QPushButton弱很多
        • 是在文本中使用&跟上一个字符来表示快捷键
          • 例如&A -> 通过键盘上的alt + a来触发这个快捷键
    • QFrameQLabel的父类,其中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是⼀个专⻔⽤来显⽰数字的控件,类似于"⽼式计算器"的效果
  • 核心属性
    • intValueQLCDNumber显⽰的数字值(int)
    • valueQLCDNumber显⽰的数字值(double)
      • intValue是联动的
        • 例如:给value设为1.5,intValue的值就是2
      • 设置valueintValue的⽅法名字为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信号
    • 使⽤connectQTimer::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);
    	}
    }
    
    // 功能实现
    {
    	// 创建QTimer
    	timer = 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):当年份⽉份改变时发出
      • 形参表⽰改变后的新年份和⽉份
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DieSnowK

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

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

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

打赏作者

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

抵扣说明:

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

余额充值