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;