接着上一个博客。首先我们建立了一个"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的两种设置方法对应两个按钮。详情可见上面代码中的注释。