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;