Qt笔记2之Qt5中防止中文乱码、在界面上动态显示当前时间和Qt按钮根据不同状态显示不同背景

mac2022-06-30  28

接着上一个博客。首先我们建立了一个"Test"项目。

目录

在vs中 qt工程的解决方案的项目文件布局

qrc文件

Qt5中防止中文乱码

接着在界面上动态显示当前时间

Qt按钮根据不同状态显示不同背景


 

如图一所示,为

在vs中 qt工程的解决方案的项目文件布局。

图1

①"Form Files":存放ui文件,双击ui文件,可以直接进入到Qt Designer进行界面设计,也可以右键将ui文件删除。

②"Resource Files":存放qrc文件,双击qrc文件,如图二所示:

qrc文件

图2

    

如图二所示,点击"Add"将我们所需要的文件添加到其中,在以后当我们要用到该文件时,只需要去引用其地址啦。比如我们先添加一些照片进去以便后面使用。

图3

如图3所示,进行文件的选取,有时候如果发现文件夹中明明有图片,但是在图3选取时却找不到。那么只需要把图片的地址复制到选取框中即可,点击"打开"即可。

图4

如图4所示,将名为“ico.png”的图片添加到qrc中,最后记得点击左上角的保存按钮。

接着就可以来使用qrc中提及的图片了,如下,设置图标。

图5

如图5所示,图标便变成了爱心,设置代码如下,记得#include <QIcon>:

this->setWindowIcon(QIcon(":/Test/Resources/ico.png"));

QIcon里的参数为图片的路径,是从qrc文件里复制过来的。

设置背景,并将窗体大小设成和图片一样,如下:

QPixmap pixmap(":/Test/Resources/background.jpg"); //先填宽度,再填高度 this->setMaximumSize(QSize(pixmap.width(),pixmap.height())); this->setMinimumSize(QSize(pixmap.width(),pixmap.height())); QPalette palette = this->palette(); palette.setBrush(QPalette::Window, QBrush(pixmap)); this->setPalette(palette);

使用上面代码有时候却发现设置的窗体会比原图片大,不知道为啥哈啊哈~~~

Qt5中防止中文乱码

注意Qlabel *mlabel; 若定义成Qlabel mlabel; 则在mlabel = new QLabel(this);会报错。如下:

Qlabel *mlabel; mlabel = new QLabel(this); mlabel->setText(QString::fromLocal8Bit("祝君安康")); // mlabel->setText("祝君安康"); 图6

如果直接mlabel->setText("祝君安康");那么就可能乱码,如下:

图6-1

如图6所示,经过上面设置后,文字初始位置在左上角,再如下,对label 设置颜色、粗细和大小。进行设置,如图7所示。

mlabel->move(80, 80);//初始位置在左上角,将其移动到(80,80)的位置 //设置颜色、粗细和大小。注意 font-size 中间不是下划线 mlabel->setStyleSheet("color:rgb(144,3,134);font:bold;font-size:15px"); 图7

接着在界面上动态显示当前时间,如下:

QString labStyle = "color:rgb(50,205,50);font:bold;font-size:15px"; //获取当前时间 mlabTime = new QLabel(this); mlabTime->move(200, 200); QDateTime curTime = QDateTime::currentDateTime(); //获取时间 年月日时分秒 星期 QString sCurTime = curTime.toString("yyyy.mm.dd.hh.mm.ss ddd"); mlabTime->setText(sCurTime); //下面让时间动起来,使用 connect函数, &QTimer::timeout每秒发射一次信号 QTimer *newTimer = new QTimer(this); //谁(newTimer)发送了信号(&QTimer::timeout),然后newTimer所在的界面(this)去执行里面的代码 connect(newTimer, &QTimer::timeout, this, [=] { QDateTime curTime = QDateTime::currentDateTime(); //获取时间 年月日时分秒 星期 QString sCurTime = curTime.toString("yyyy.mm.dd.hh.mm.ss ddd"); mlabTime->setText(sCurTime); }); //一定要记得启动 newTimer->start(); mlabTime->setStyleSheet(labStyle);

注意下面这一行代码。

//获取时间格式为 "年.月.日 时:分:秒 星期" QString sCurTime = curTime.toString("yyyy.MM.dd hh:mm:ss ddd");

注意时间的格式,年月日用点隔开,时分秒用冒号隔开,然后他们之间用空格隔开,注意月用大写的"MM",而分用小写的"mm"。他们是通过大小写来区分的。一定要注意时间的格式,不然到时候显示时可能会有些错误。运行结果如下:

图8 图9

如图8、图9所示,中下方的绿色部分的时间就在动态变化~~~

Qt按钮根据不同状态显示不同背景,如下:

QPushButton *mBtnLogin; QPushButton *mBtnRegister; //setStyleSheet的两种设置方法对应两个按钮,效果是一样的,如下: mBtnLogin = new QPushButton(this); mBtnLogin->setText(QString::fromLocal8Bit("登录")); mBtnLogin->move(115, 300); mBtnLogin->setFixedSize(200, 40); //mBtn->setStyleSheet("color:rgb(102,205,0)"); //设置不同状态下的格式,注意在不同状态之间,分行显示时,每个状态都要一对双引号,如下。 mBtnLogin->setStyleSheet("QPushButton{background-color:rgb(0,122,204);color:rgb(102,205,0); font:bold;font-size:15px;}" "QPushButton:hover{background-color:rgb(255,181,197);}"); //如下,在不同状态之间如想分行显示,那么须在不同状态间加一个/ 并且总的只需要一对双引号 QString sBtnRes = "QPushButton{background-color: rgb(0,122,204);color:rgb(102,205,0); font:bold;font-size:15px;}\ QPushButton:hover{background-color:rgb(255,181,197);}"; mBtnRegister = new QPushButton(this); mBtnRegister->setText(QString::fromLocal8Bit("注册")); mBtnRegister->move(115, 350); mBtnRegister->setFixedSize(200, 40); mBtnRegister->setStyleSheet(sBtnRes); 图10 图11

如图10、11设置了两个按钮的样式,将鼠标悬浮在登录按钮上,它的背景颜色就会改变,如图11所示。另外注意setStyleSheet的两种设置方法对应两个按钮。详情可见上面代码中的注释。

最新回复(0)