qt:常见标签操作,倒计时功能,进度条与日历

发布于:2025-02-21 ⋅ 阅读:(19) ⋅ 点赞:(0)
1.标签常见函数 
函数 功能
void setext(const QString &text) 设置文本
QString text()const 获取文本
void setPixmap(const QPixmap)与Pixmap()const 设置和获取图像
void setAlignment(Qt::Alignment alignment) 设置对齐(获取和上面一样)
void setWordWrap(bool on) 设置是否需要文本对齐(获取和上面一样)
void setTextFormat(Qt::TextFormat format) 设置富文本和纯文本
void clear() 清除
富文本 包含例如超链接的文本
纯文本 没有任何格式信息的文本
2.标签常见文本

四种常见的文本:富文本,纯文本,markdown,自动文本的显示

    l1=new QLabel("富文本",this);
    l2=new QLabel("纯文本",this);
    l3=new QLabel("markdown",this);
    l4=new QLabel("自动文本",this);
    l1->setTextFormat(Qt::RichText);
    l2->setTextFormat(Qt::PlainText);
  l3->setTextFormat(Qt::MarkdownText);
    l4->setTextFormat(Qt::AutoText);
  l1->setGeometry(300,100,100,50);
    l2->setGeometry(300,200,100,50);
  l3->setGeometry(300,300,100,50);
    l4->setGeometry(300,400,100,50);

 3.标签图片

现在来演示一下图片标签

  p1=new QLabel(this);
    QPixmap picture("D:/project/p2.jpg");
  QRect w=this->geometry();
    p1->setPixmap(picture);
  p1->setGeometry(0,0,w.width(),w.height());
    p1->setScaledContents(true);

设置图片拉伸:重写resizeEvent函数

在头文件中声明,该函数继承于它的父类

void resizeEvent(QResizeEvent *event) override;

然后进行重写

void MainWindow::resizeEvent(QResizeEvent *event)
{
    QMainWindow::resizeEvent(event);

        p1->setGeometry(0, 0, this->width(), this->height());

}

就可以实现图片缩放

4.利用qt designer设置文本框

在打开qtdesigner,然后在左侧选中QLable的父亲QFrame,将framesheet设置为box,就有框了,如果想要Label,同样方法拖动即可

5.右上角对齐,自动换行,缩进,边距

分布以四个标签来展示以上四个功能

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->label->setText("大家好");
    ui->label->setAlignment(Qt::AlignRight|Qt::AlignTop);
    ui->label_2->setText("我是c栈算法小辰哥,我是华中农业大学的一名学生,我的学院是信息学院,我的专业是计科");
    ui->label_2->setWordWrap(true);
    ui->label_3->setText("我是c栈算法小辰哥,我是华中农业大学的一名学生,我的学院是信息学院,我的专业是计科");
    ui->label_3->setWordWrap(true);
    ui->label_3->setIndent(20);
     ui->label_4->setText("我是c栈算法小辰哥,我是华中农业大学的一名学生,我的学院是信息学院,我的专业是计科");
    ui->label_4->setMargin(5);
}

Widget::~Widget()
{
    delete ui;
}

6.伙伴机制与快捷键

在标签中写类似&键盘按键的形式,再利用setBuddy绑定一个伙伴按钮,就可以使用Alt+键盘按键进行选中

   ui->label->setText("&A");
   // ui->label->setAlignment(Qt::AlignRight|Qt::AlignTop);
    ui->label->setBuddy(ui->radioButton);

 

7.倒计时项目

QLCDNumber是一种专门显示数字的控件,可以利用它来写

属性 性质
intValue 显示整数
value 浮点数(设置二者方法为display)
digitCount 显示数字位数
mode

数字显示形式:
- QLCDNumber::Dec:十进制模式,显示常规的十进制数字。
- QLCDNumber::Hex:十六进制模式,以十六进制格式显示数字。
- QLCDNumber::Bin:二进制模式,以二进制格式显示数字。
- QLCDNumber::Oct:八进制模式,以八进制格式显示数字。
只有在十进制模式下才能显示小数点后的内容。
 

segmentStyle

设置显示风格:
QLCDNumber::Flat:平面的显示风格,数字呈现在一个平坦的表面上。
QLCDNumber::Outline:轮廓显示风格,数字具有清晰的轮廓和阴影效果。
QLCDNumber::Filled:填充显示风格,数字被填充颜色并与背景区分开。

不常用:smallDecimalPoint:设置较小的小数点。当启用时,小数点将使用更小的段来表示,节省空间并提高显示密度。

首先用qt designer拖一个QLCDNumber,将初始值设置为20

然后在头文件里搞一个QTimer成员作为计时器,通过start方法启动后,每个一段时间就会触发一次QTimer::timeout信号,可以将它和Weiget::updateTime进行连接,就能实现每次触发timeout都会有updateTime(这个函数要自己写)

然后进行初始化和设置,具体看代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    t=new QTimer(this);
    connect(t,&QTimer::timeout,this,&Widget::updateTime);
    t->start(2000);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::updateTime()
{
    int val=ui->lcdNumber->intValue();
    if(val<=0)
    {
        t->stop();
        return;
    }
    ui->lcdNumber->display(val-1);
}

t->start表示计时器从2000毫秒也就是20秒开始计算

在遇到类似问题时,要避免循环(Widget构造函数始终无法执行完毕,界面会显示错误),也不能创建一个线程去执行这个操作(任何GUI操作必须在主线程里)

8.进度条项目

QProgessBar就是进度条项目的主要部分

属性 特点
minimum 最小值,默认为0
maximum 最大值,默认100
value 当前值
alignment 文本在进度条中的对齐方式:
Qt::AlignLeft:左对齐
Qt::AlignRight:右对齐
Qt::AlignCenter:居中对齐
Qt::AlignJustify:两端对齐
extVisible 进度条的数字是否可见。设置为 true 时显示进度数值,false 则隐藏。
orientation 进度条的方向是水平还是垂直。
Qt::Horizontal:水平方向
Qt::Vertical:垂直方向
invertAppearance 是否朝反方向增长进度。如果设为 true,则进度从最大值向最小值递减。
textDirection 文本的朝向。影响文本在进度条中的排列方向。
format 展示的数字格式:
%p:表示进度的百分比(0-100)
%v:表示进度的数值(0-100)
%m:表示剩余时间(以毫秒为单位)
%t:表示总时间(以毫秒为单位)

为了提高编译速度,可以使用 class 前置声明的方式来尽量减少头文件的包含,方法就是包含一个头文件(#include),这个头文件包含几乎所有的前置声明,如果不进行创建对象等操作,这种方式是可以的

还是老样子,拖一个进度条在qt designer上,设置初始值为24,再用上我们之前的QTimer,然后就可以有一个进度条了

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ti=new QTimer(this);
    connect(ti,&QTimer::timeout,this,&Widget::updatetime);
    ti->start(100);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::updatetime()
{
    int value=ui->progressBar->value();
    if(value>=100)
    {
        ti->stop();
        return;
    }
    ui->progressBar->setValue(value+1);
}

注意,改变颜色后字体须水平居中

9.日历项目

QCalendarWidget是主体

属性 特点
selectDate 当前选中的日期。
minimumDate 最小日期,定义用户可以选择的最早日期。
maximumDate 最大日期,定义用户可以选择的最晚日期
firstDayOfWeek 每周的第一天(也就是日历的第一列)是周几。
gridVisible 是否显示表格的边框,默认为 true 显示边框。
selectionMode 是否允许选择日期。可以设置为单选或不选。
navigationBarVisible 日历上方标题是否显示,默认为 true 显示导航栏。
horizontalHeaderFormat 日历上方标题显示的日期格式,控制顶部标题栏的内容。
verticalHeaderFormat 日历第一列显示的内容格式,控制左侧垂直标题栏的内容。
dateEditEnabled 是否允许日期被编辑,默认为 false 不可编辑。
信号 特点
selectionChanged(const QDate&) 当选中的日期发生改变时发出。参数是一个 QDate 类型,保存了新的选中日期。
activated(const QDate&) 当双击一个有效的日期或者按下回车键时发出。参数是一个 QDate 类型,保存了选中的日期。
currentPageChanged(int, int) 当年份月份改变时发出。参数表示改变后的新年份和月份,分别为 int 类型。

 

 

在界面上创建一个 QCalendarWidget 和一个 label,objectName 分别为 calendarWidget,label

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
      connect(ui->calendarWidget, &QCalendarWidget::selectionChanged, this, &Widget::changedate);
}
void Widget::changedate()
{
    QDate d=ui->calendarWidget->selectedDate();
    qDebug()<<d;
    ui->label->setText(d.toString());
}
Widget::~Widget()
{
    delete ui;