6.常用控件
Qt为我们应用程序界面开发提供的一系列的控件,下面我们介绍两种最常用的两种,所有控件的使用方法我们都可以通过帮助文档获取。
1.QLabel控件使用
QLabel是我们最常用的控件之一,其功能很强大,我们可以用来显示文本,图片和动画等
显示文字(普通文本、html)
通过QLabel类的setText函数设置显示的内容:
void setText(const QString);
-
显示普通文本字符串
QLabel *label = new QLabel(this);
label->setText("Hello, world!");
-
显示HTML格式的字符串比如显示一个链接:
QLabel *labelUrl = new QLabel(this);
labelUrl->setText("<h1><a href=\"https://www.baidu.com\">百度一下</a></h1>");
labelUrl->setOpenExternalLinks(true);
其中setOpenExternalLinks()函数是用来设置用书点解链接之后是否自动打开链接,如果参数指定为true则会自动打开,如果设置为false,想要打开链接只能通过捕捉linkActivated()信号,在自定义的槽函数中使用QDesktopServices::openUrl()打开链接,该函数参数默认值为false。
QLabel *labelUrl = new QLabel(this);
labelUrl->setText("<h1><a href=\"https://www.baidu.com\">百度一下</a></h1>");
connect(labelUrl, &QLabel::linkActivated, this, &MainWindow::slotOpenUrl);
// 自定义槽函数
void MainWindow::slotOpenUrl(const QString &link)
{
QDesktopServices::openUrl(QUrl(link));
}
显示图片
可以使用QLabel的成员函数setPixmap设置图片。
void setPixmap(const QPixmap &);
//首先定义QPixmap对象
QPixmap pixmap;
//加载图片
pixmap.load(":/images/moon.jpeg");
//最后将图片设置到QLabel中
QLabel *labelImage = new QLabel(this);
label.setPixmap(pixmap);
显示动画
可以使用QLabel的成员函数setMovie加载动画,可以播放gif格式的文件:
void setMoive(QMovie *movie);
//首先定义QMovied对象,并初始化:
QMovie *movie = new QMovie(":/Mario.gif");
//播放加载的动画:
movie->start();
//将动画设置到QLabel中:
QLabel *label = new QLabel;
label->setMovie(movie);
2.QLineEdit
Qt提供的单行文本编辑框。
设置/获取内容
获取编辑框内容使用text(),函数声明如下:
QString text() const
设置编辑框内容
void setText(const QString &)
设置显示模式
使用QLineEdit类的setEchoMode()函数设置文本的显示模式,函数声明:
void setEchoMode(EchoMode mode)
EchoMode是一个枚举类型,一共定义了四种显示模式:
-
QLineEdit::Normal 模式显示方式,按照输入的内容显示。
-
QLineEdit::NoEcho 不显示任何内容,此模式下无法看到用户的输入。
-
QLineEdit::Password 密码模式,输入的字符会根据平台转换为特殊字符。
-
QLineEdit::PasswordEchoOnEdit 编辑时显示字符否则显示字符作为密码。
另外,我们再使用QLineEdit显示文本的时候,希望在左侧留出一段空白的区域,那么,就可以使用QLineEdit给我们提供的setTextMargins函数:
void setTextMargins(int left, int top, int right, int bottom)
用此函数可以指定显示的文本与输入框上下左右边界的间隔的像素数。
设置输入提示
#include <QCompleter>
#include <QStringList>
如果我们想实现一个与百度的搜索框类似的功能:输入一个或几个字符,下边会列出几个跟输入的字符相匹配的字符串,QLineEdit要实现这样的功能可以使用该类的成员函数setComleter()函数来实现:
void setCompleter(QCompleter *c)
创建QCompleter对象,并初始化
QStringList tipList;
tipList<<"Hello" << "how are you" << "HaHa" << "oh,hello";
// 不区分大小写
completer->setCaseSensitivity(Qt::CaseInsensitive);
Qcompleter *completer = new QCompleter(tipList, this);
QCompleter类的setCaseSensitivity()函数可以设置是否区分大小写,它的参数是一个枚举类型:
-
Qt::CaseInsensitive 不区分大小写
-
Qt::CaseSensitive 区分大小写
如果不设置该属性,默认匹配字符串时是区分大小写的。
另外我们还可以设置字符串其中某一部分匹配,此功能可通过QCompleter类的setFilterMode函数来实现,函数声明如下:
void setFilterMode(Qt::MatchFlags filterMode)
其参数为Qt定义的宏,有多重类型,具体可参考Qt帮助稳定,要实现我们上边提到的功能,参数可以使用 Qt::MatchContains:
completer->setFilterMode(Qt::MatchContains);
属性设置完成之后,将QCompleter对象设置到QLineEdit中:
QLineEdit *edit = new QLineEdit(this);
edit->setCompleter(completer);
示例:一个简单的登录界面
#include "mainwindow.h" #include <QLabel> #include <QPushButton> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->resize(400,300); username = new QLineEdit(this); username->move(130,100); username->setMaxLength(16); username->resize(200,30); QLabel *userLabel = new QLabel(this); userLabel->move(55,100); userLabel->setText("user:"); password = new QLineEdit(this); password->move(130,150); password->setMaxLength(16); password->resize(200,30); QLabel *passLabel = new QLabel(this); passLabel->move(55,150); passLabel->setText("password:"); QPushButton *button = new QPushButton(this); button->move(160,200); button->setText("sign in"); connect(button, &QPushButton::clicked, this, &MainWindow::slotSignIn); } MainWindow::~MainWindow() { } // 自定义槽函数 void MainWindow::slotSignIn() { user = username->text(); pass = password->text(); qDebug("%s",qPrintable(user)); qDebug("%s",qPrintable(pass)); }