一.为什么使用自定义界面类
当我们需要个性化的界面的时候,Qt自带的组件无法满足我们的时候,我们可以自己来组合组件来进行自定义界面类。
二.怎么使用自定义界面类
1.在哪里
选择空白,完全由我们自己来设置
给这个类取个名字。
然后就会多出三个文件:
2.开始设计
拖拉3个标签
设置头像的区域
设置昵称的大小和粗体:
这就是我设计的界面
3.对界面类添加功能
在qmyqq.h中定义:
void setHeadImg(QString img); void setNickName(QString name); void setInfo(QString name);
注意定义成公共接口哦。
在qmyqq.cpp中实现:
#include "qmyqq.h" #include "ui_qmyqq.h" QMyqq::QMyqq(QWidget *parent) : QWidget(parent), ui(new Ui::QMyqq) { ui->setupUi(this); } QMyqq::~QMyqq() { delete ui; } void QMyqq::setHeadImg(QString img) { //标签也可以设置图片 ui->labelHead->setPixmap(QPixmap(img).scaled(120,120)); } void QMyqq::setNickName(QString name) { ui->labelNickName->setText(name); } void QMyqq::setInfo(QString info) { ui->labelInfo->setText(info); }
4.开始使用
记得要添加是自己定义的头文件哦!
#include "qmyqq.h" ... QMyqq* myqq=new QMyqq(this);//自己定义的 myqq->setHeadImg(":/image/girl.png"); myqq->setInfo("天上天下唯我独尊"); myqq->setNickName("姚哥"); myqq->setGeometry(10,10,600,120);
运行结果:
三.优化项目
OK,现在我们已经知道了,如何自定义界面类了
书接上回,我们要优化我们的项目。
添加个性标签。
首先可以将我们刚刚的自己自定义的文件导入到我们上次写的
toolBox里面.
我们当时时在toolBox里面添加的ListWidget,ListWidget里面添加的QListWidgetItem列表项,因为列表项只能设置一个图片和文本,不能达到我们的要求,所以我们只能自定义界面类。
QListWidget *listW=new QListWidget; for(int i=0;i<60;i++) { QListWidgetItem *item=new QListWidgetItem; item->setSizeHint(QSize(600,130));//设置列表项的大小 listW->addItem(item);//添加空壳列表项 //自定义界面的设置 MyQQ *qq=new MyQQ; qq->setHeadImage(":/image/girl.png"); qq->setNickName("好友"+QString::number(i+1)); qq->setInfo("好好学习甜甜咸咸"); listW->setItemWidget(item,qq);//列表项用自定义组件 } ui->toolBox->addItem(listW,"我的好友 60");//添加到toolBox
运行结果:
当然这些图片名称等都是重复的,我们可以来个随机添加,哈哈
void Dialog::initUI() { int count= ui->toolBox->count(); for(int i=count-1;i>=0;i--) { ui->toolBox->removeItem(i); } srand(time(0)); QStringList listName={"村和","安九","南方菇凉","花","早点睡"}; QStringList listInfo={"为什么昨天又碎不着","我的人生我找找","到处走走","明知道不可为而为之是最大的幸福","2024年5月17日22:06:28"}; QListWidget *list=new QListWidget; for(int i=0;i<61;i++) { QListWidgetItem *item=new QListWidgetItem; item->setSizeHint(QSize(600,130)); qqq* qq=new qqq(); int num=rand()%5; int index=rand()%5; int index1=rand()%5; qq->setHeadImage(":/image/girl"+QString::number(num)+".png"); qq->setNickName(listName[index]); qq->setInfo(listInfo[index1]); list->addItem(item); list->setItemWidget(item,qq); } ui->toolBox->addItem(list,"好友 61"); }
运行结果:
爽歪歪呀!你也来试试看吧!
四.总结一下
主要就是当Qt自带的组件,无法满足我们对界面的追求时。
我们可以自定义界面类,可以自己设计界面,和用代码进行控制界面的对外的接口。
乞丐不会妒忌百万富翁,但是他肯定会妒忌收入更高的乞丐。