QT C++(QT控件 QLabel,QLCDNumber,QProgressBar,QCalendarWidget)

devtools/2024/12/22 20:49:44/

文章目录

  • 1. QLabel
  • 2. QLCDNumber
  • 3. QProgressBar
  • 4. QCalendarWidget

1. QLabel

QLabel常见属性:

  1. text:QLabel中的文本
  2. textFormat:文本中的格式
    • Qt::PlainText:纯文本
    • Qt::RichText:富文本,支持html标签
    • Qt::MarkdownText markdown格式
    • Qt::AutoText根据文本内容自动选择文本格式
  3. pixmap:QLabel内包含的图片
  4. scaledContents:true为内容自动拉伸填充,false则不会自动拉伸。一般搭配图片使用。
  5. alignment:对其方式,可以设置水平或竖直方向对齐
  6. wordWrap:true文本内容会自动换行,false文本内容不会自动换行。
  7. indent:设置文本缩进,水平竖直方向都生效。
  8. margin:内部文本和边框之间的边距,indent最多只是两个方向有效,margin上下左右四个方向都有效。
  9. openExternalLinks:是否允许打开一个外部的链接
  10. buddy:给QLabel关联一个伙伴,点击QLabel时激活对应的伙伴。

eg1:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setTextFormat(Qt::PlainText);ui->label->setText("# <b>纯文本</b>");ui->label_2->setTextFormat(Qt::RichText);ui->label_2->setText("# <b>富文本</b>");ui->label_3->setTextFormat(Qt::MarkdownText);ui->label_3->setText("# Markdown 形式");
}

在这里插入图片描述
eg2:
变化窗口,QLabel里的图片始终铺满整个窗口
Qt中表示用户操作有两类,一个是事件,另一个是信号。
用户改变窗口大小时,Qt会触发resize事件。
这里选择让widget窗口类重写QWidget的resizeEvent虚函数。这样在改变窗口大小时,整个函数就会反复调用resizeEvent。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QRect rect=this->geometry();ui->label->setGeometry(0,0,rect.width(),rect.height());QPixmap pic(":/test.jpg");ui->label->setPixmap(pic);//启用自动拉伸使图片填充满整个labelui->label->setScaledContents(true);
}Widget::~Widget()
{delete ui;
}//event中包含窗口这一时刻的大小
void Widget::resizeEvent(QResizeEvent *event)
{//窗口大小变化时修改label大小ui->label->setGeometry(0,0,event->size().width(),event->size().height());
}

eg3:设置文字格式

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setText("这是第一段文本");ui->label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);//水平竖直居中ui->label_2->setText("长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本");ui->label_2->setWordWrap(true);//设置自动换行ui->label_3->setText("设置缩进");ui->label_3->setIndent(50);//缩进50像素,上左缩进ui->label_4->setText("设置边距");ui->label_4->setMargin(55);//设置边距(四个方向),文字被覆盖掉一部分
}

在这里插入图片描述

eg4:QLabel伙伴属性
在文本中使用&+字符来表示快捷键例如&A则可以通过alt+a来触发
如果绑定了伙伴,可以通过快捷键选中单选按钮和复选按钮。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置伙伴关系ui->label->setBuddy(ui->radioButton);ui->label_2->setBuddy(ui->radioButton_2);
}

在这里插入图片描述

在这里插入图片描述

2. QLCDNumber

QLCDNumber是一个专门用来显示数字的控件,数字样式类似于计算器上的数字。

控件常见属性:

  1. intValue:QLCDNumber显示的数字整数。
  2. value:QLCDNumber显示的浮点数字
  3. digitCount:显示几位数字
  4. mode:数字显示样式。(十进制或十六进制等)
  5. segmentStye:显示风格
    • QLCDNumber::Flat平面的显示风格,数字呈现在一个平坦的表面上。
    • QLCDNumber::Qutline数字有明显的阴影
    • QLCDNumber::Filled填充风格,数字颜色和背景有所区分。
  6. smallDecimalPoint:设置比较小的小数点。

eg:倒计时demo

这里使用定时器来实现。QT中封装了定时器QTimer,这个对象创建会发送timeout信号,可以设置start方法开启定时器,参数中可以设置timeout周期。

结合connect就可以把timeout信号绑定到需要的槽函数中,修改LCDNumber上的数字。

class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handle();QTimer* time=new QTimer(this);private:Ui::Widget *ui;
};Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置LCDNumber初始值ui->lcdNumber->display("10");//将QTimer的timeout信号和槽函数绑定connect(time,&QTimer::timeout,this,&Widget::handle);//启动定时器time->start(1000);//触发定时器的时间,单位是ms
}Widget::~Widget()
{delete ui;
}void Widget::handle()
{
//    qDebug()<<"debug handle";//获取到QLCDNumber控件的数字int num=ui->lcdNumber->intValue();if(num<=0){//停止定时器time->stop();return;}ui->lcdNumber->display(num-1);
}

在这里插入图片描述
需要注意的是:

在QT中,界面是有一个专门的线程去维护更新的(主线程)。
对于GUI来说,内部包含了很多隐藏状态,Qt为了保证修改界面过程中线程安全 。QT禁止了其他线程直接修改界面。所以不可以通过创建多线程的方式来更新QLCDNumber控件的值。

槽函数默认在主线程调用,所以在槽函数中修改界面是可以的。

3. QProgressBar

Qt进度条控件QProgressBar属性

  1. minmum:进度条最小值。
  2. maxmun:进度条最大值
  3. value:进度条当前值
  4. alignment:文本在进度条的对齐方式。
  5. textVisable:进度条数字是否可见
  6. orientation:进度条方向是水平还是竖直
  7. invertAppearance:是否朝着反方向增长进度
  8. textDirection:文本朝向。
  9. format:展示数字格式 (%p表示进度百分比)

eg: 创建一个进度条随着时间增长的进度条,每隔100ms进度条数值+1

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer=new QTimer(this);connect(timer,&QTimer::timeout,this,&Widget::handle);timer->start(100);
}void Widget::handle()
{//获取进度条当前值int val=ui->progressBar->value();if(val>=100){timer->stop();return;}ui->progressBar->setValue(val++);
}

4. QCalendarWidget

Qt封装好的日历界面,常见属性如下:

  1. selectData:当前选中的日期。
  2. minimumDate:最小日期
  3. maximnumDate:最大日期
  4. firstDayOfWeek:每周第一天是周几
  5. gridVisible:是否显示表格边框
  6. selectonMode:是否允许选中日期
  7. navigationBarVisible:日历上方标题是否显示
  8. horizontaHeaderFormat:日历上方显示日期格式
  9. verticalHeaderFormat:日历第一列显示内容格式
  10. dateEditEnable:是否允许日期被编辑。

重要信号:

  1. selectionChange:当前选中的日期改变
  2. activated:双击了一个有效日期,或者按下回车键。将选中的日期返回
  3. currentPageChanged:当年份改变时发出,形参后表示改变的新年份和月份。

eg:简单日历使用:显示选中的日期

void Widget::on_calendarWidget_selectionChanged()
{QDate date=ui->calendarWidget->selectedDate();
//    qDebug()<<date;ui->label->setText(date.toString());
}

在这里插入图片描述


http://www.ppmy.cn/devtools/58229.html

相关文章

本地部署 SenseVoice - 阿里开源语音大模型

本地部署 SenseVoice - 阿里开源语音大模型 1. 创建虚拟环境2. 克隆代码3. 安装依赖模块4. 启动 WebUI5. 访问 WebUI 1. 创建虚拟环境 conda create -n sensevoice python3.11 -y conda activate sensevoice 2. 克隆代码 git clone https://github.com/FunAudioLLM/SenseVoic…

谈面向任务的多轮对话系统(TOD)

面向任务对话系统&#xff08;Task-Oriented Dialogue (TOD) Systems)主要是为解决特定任务的&#xff0c;比如订票任务&#xff08;订机票&#xff0c;电影票等&#xff09;&#xff0c;预定饭店等。这种对话往往需要多轮对话才能够完成。 多轮对话的例子 客户预定一个餐厅的…

关于GIS的概念方面在前端编程中的理解

关于GIS的概念方面在前端编程中的理解 一. 什么是gis二. 关于地球的建模(了解)三. GIS坐标系表现形式四.GIS的数据4.1 矢量数据4.2 栅格数据4.3 矢量数据和栅格数据的不同 一. 什么是gis 地理坐标系统&#xff0c;其目的就是通过地理坐标系可以确定地球上任何一点的位置。 二. …

《梦醒蝶飞:释放Excel函数与公式的力量》8.3 COUNTBLANK函数

8.3 COUNTBLANK函数 在数据处理和分析中&#xff0c;我们经常需要识别和统计数据集中的空白单元格。COUNTBLANK函数是Excel中用于统计某个范围内空白单元格数量的强大工具。 8.3.1 函数简介 COUNTBLANK函数用于统计指定范围内的空白单元格数量。这在数据清洗、数据完整性检查…

【笔记】记一次在linux上通过在线安装mysql报错 CentOS 7 的官方镜像已经不再可用的解决方法+mysql配置

报错&#xff08;恨恨恨恨恨恨恨&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff09;&#xff1a; [rootlocalhost ~]# sudo yum install mysql-server 已加载插件&#xff1a;fastestmirror, langpacks Determining fastest mirrors Could not retrie…

回溯算法-以医院信息管理系统为例

1.回溯算法介绍 1.来源 回溯算法也叫试探法&#xff0c;它是一种系统地搜索问题的解的方法。 用回溯算法解决问题的一般步骤&#xff1a; 1、 针对所给问题&#xff0c;定义问题的解空间&#xff0c;它至少包含问题的一个&#xff08;最优&#xff09;解。 2 、确定易于搜…

hdu物联网硬件实验2 GPIO亮灯

学院 班级 学号 姓名 日期 成绩 实验题目 GPIO亮灯 实验目的 点亮三个灯闪烁频率为一秒 硬件原理 无 关键代码及注释 const int ledPin1 GREEN_LED; // the number of the LED pin const int ledPin2 YELLOW_LED; const int ledPin3 RED…

Linux Mac 安装Higress 平替 Spring Cloud Gateway

Linux Mac 安装Higress 平替 Spring Cloud Gateway Higress是什么?传统网关分类Higress定位下载安装包执行安装命令执行脚本 安装成功打开管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官网 Higress是什么? Higress是基于阿里内部的…