QT——组件提升+读取qss文件
本案例是创建myPtnMenu,功能是点击按钮之后出现类似于菜单栏的弹窗
效果如下:
1、新建C++类
这里勾选QObject和Q_OBJECT(宏)
只有加入了Q_OBJECT,才能使用QT中的signal和slot机制,且Q_OBJECT要放在类的最前面
2、修改.h文件
使myPtnMenu继承QPushButton,传递QWidget对象
.cpp文件
#include "myptnmeau.h"
#include <QAction>
myPtnMeau::myPtnMeau(QWidget *parent) : QPushButton(parent)
{
// 创建菜单
myMenu = new QMenu(this);
// 创建action
QAction *helpAct = new QAction("帮助",this);
QAction *moreAct = new QAction("更多",this);
// 向菜单里添加action
myMenu->addAction(helpAct);
myMenu->addAction(moreAct);
// 给按钮设置菜单
this->setMenu(myMenu);
}
myPtnMeau::~myPtnMeau()
{
delete myMenu;
}
3、组件提升
点击按钮就会出现效果
4、添加样式
这里为了使效果更明显,使用qss文件的方式添加样式
添加资源前缀qss,添加qss文件【menu.qss】
qss文件内容如下
QMenu{
background-color:white;
padding:3px;
border:1px groove gray;
}
QMenu::item{
background-color:transparent;
}
QMenu::item:selected{
background-color:rgba(255,0,0);
}
读取并写入
QFile file(":/qss/qss/menu.qss");
file.open(QIODevice::ReadOnly);
if(file.isOpen())
{
QString str = file.readAll();
myMenu->setStyleSheet(str);
file.close();
}
5、.cpp完整代码
#include "myptnmeau.h"
#include <QAction>
#include <QFile>
myPtnMeau::myPtnMeau(QWidget *parent) : QPushButton(parent)
{
myMenu = new QMenu("",this);
QAction *helpAct = new QAction("帮助",this);
QAction *moreAct = new QAction("更多",this);
myMenu->addAction(helpAct);
myMenu->addAction(moreAct);
QFile file(":/qss/qss/menu.qss");
file.open(QIODevice::ReadOnly);
if(file.isOpen())
{
QString str = file.readAll();
myMenu->setStyleSheet(str);
file.close();
}
this->setMenu(myMenu);
}
myPtnMeau::~myPtnMeau()
{
delete myMenu;
}
分类:
A5 QT
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端