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 | 数字显示形式: |
| segmentStyle | 设置显示风格: |
不常用: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;
