当前位置: 首页 > news >正文

微信免费做邀请函模版网站优化方案怎么写

微信免费做邀请函模版网站,优化方案怎么写,广州安全教育平台账号是多少,延吉网站建设depawo1、目的 实现自定义二级选项框&#xff0c;一级选项有子项就没有选项功能&#xff0c;没有子项就有功能。 2、效果 3、方法 可以通过QToolButton和QMenu结合来实现这个功能。 4、源码 a、头文件 #ifndef SECONDARYCOMBOBOX_H #define SECONDARYCOMBOBOX_H#include <QM…
1、目的

实现自定义二级选项框,一级选项有子项就没有选项功能,没有子项就有功能。

2、效果

在这里插入图片描述

3、方法

可以通过QToolButton和QMenu结合来实现这个功能。

4、源码
a、头文件
#ifndef SECONDARYCOMBOBOX_H
#define SECONDARYCOMBOBOX_H#include <QMenu>
#include <QToolButton>
#include <QWidget>struct UserData {QString textStr;QString dataStr;QAction *act = nullptr;
};
Q_DECLARE_METATYPE(UserData)/** 需求:二级选项框,一级选项有子项就没有选项功能,没有子项就有功能;**/
class SecondaryComboBox : public QWidget {Q_OBJECTpublic:explicit SecondaryComboBox(QWidget *parent = 0);~SecondaryComboBox();QString currentData() const;QString currentText() const;void setCurrentData(const QString &data);// 一次加入全部数据void addLists(const QList<QPair<QString, QString>> &firstList,const QList<QList<QPair<QString, QString>>> &secondList);signals:void currentDataChange();private:QToolButton *toolBtn = nullptr;QMenu *toolMenu = nullptr;QList<UserData> userDataList;
};#endif  // SECONDARYCOMBOBOX_H
b、源文件
#include "secondarycombobox.h"#include <QVBoxLayout>const char propertyStr[5] = "data";SecondaryComboBox::SecondaryComboBox(QWidget *parent) : QWidget(parent) {QVBoxLayout *lay = new QVBoxLayout(this);lay->setMargin(0);toolBtn = new QToolButton(this);toolMenu = new QMenu(this);toolBtn->setMinimumSize(100, 30);toolBtn->setPopupMode(QToolButton::MenuButtonPopup);toolBtn->setMenu(toolMenu);lay->addWidget(toolBtn);
}SecondaryComboBox::~SecondaryComboBox() {}QString SecondaryComboBox::currentData() const {QString retStr;QVariant var = toolBtn->property(propertyStr);if (var.canConvert<UserData>()) {UserData uData = var.value<UserData>();retStr = uData.dataStr;}return retStr;
}QString SecondaryComboBox::currentText() const { return toolBtn->text(); }void SecondaryComboBox::setCurrentData(const QString &data) {bool isFind = false;UserData newData;for (int i = 0; i < userDataList.size(); i++) {UserData uData = userDataList.at(i);if (uData.dataStr == data) {isFind = true;newData = uData;break;}}QVariant var = toolBtn->property(propertyStr);if (!isFind) {if (userDataList.size() == 0) return;newData = userDataList.at(0);}if (var.canConvert<UserData>()) {UserData curData = var.value<UserData>();if (curData.dataStr != newData.dataStr) {toolBtn->setText(newData.textStr);QVariant var = QVariant::fromValue(newData);toolBtn->setProperty(propertyStr, var);emit currentDataChange();}} else {toolBtn->setText(newData.textStr);QVariant var = QVariant::fromValue(newData);toolBtn->setProperty(propertyStr, var);emit currentDataChange();}
}void SecondaryComboBox::addLists(const QList<QPair<QString, QString>> &firstList,const QList<QList<QPair<QString, QString>>> &secondList) {if (firstList.size() != secondList.size()) return;QString firstText;UserData firstUseData;bool isFirst = true;for (int i = 0; i < firstList.size(); i++) {const QPair<QString, QString> &pair = firstList.at(i);const QList<QPair<QString, QString>> &list = secondList.at(i);if (list.size() == 0) {QAction *act = new QAction(pair.first, this);UserData uData;uData.textStr = pair.first;uData.dataStr = pair.second;uData.act = act;QVariant var = QVariant::fromValue(uData);act->setProperty(propertyStr, var);userDataList.push_back(uData);toolMenu->addAction(act);if (isFirst) {firstText = pair.first;firstUseData = uData;isFirst = false;}connect(act, &QAction::triggered, [=]() {bool isChange = true;QVariant var = toolBtn->property(propertyStr);if (var.canConvert<UserData>()) {UserData uData = var.value<UserData>();if (uData.act == act) {isChange = false;}}if (isChange) {toolBtn->setText(act->text());toolBtn->setProperty(propertyStr, act->property(propertyStr));emit currentDataChange();}});} else {QMenu *menu = new QMenu(pair.first, this);for (int j = 0; j < list.size(); j++) {QPair<QString, QString> pair = list.at(j);QAction *act = new QAction(pair.first, this);UserData uData;uData.textStr = pair.first;uData.dataStr = pair.second;uData.act = act;QVariant var = QVariant::fromValue(uData);act->setProperty(propertyStr, var);userDataList.push_back(uData);menu->addAction(act);if (isFirst) {firstText = pair.first;firstUseData = uData;isFirst = false;}connect(act, &QAction::triggered, [=]() {bool isChange = true;QVariant var = toolBtn->property(propertyStr);if (var.canConvert<UserData>()) {UserData uData = var.value<UserData>();if (uData.act == act) {isChange = false;}}if (isChange) {toolBtn->setText(act->text());toolBtn->setProperty(propertyStr, act->property(propertyStr));emit currentDataChange();}});}toolMenu->addMenu(menu);}}
}

点击下载完整代码

对你有用就点个赞👍,以后需要用到就收藏⭐

http://www.dtcms.com/a/484592.html

相关文章:

  • 注重网站建设 把好宣传思想关口嵌入式软件开发要求
  • 网站怎么营销推广网站建设属于应用软件吗
  • 青海西宁做网站多少钱vi设计公司公司
  • 网站上线后做什么长乐福州网站建设
  • 网站制作是什么公司冷饮网站开发背景意义
  • 网站怎么制作做seo网站页面诊断
  • 企业网站建设 全包iis网站建设中
  • 网站建设吉金手指排名14网站的建设与运营模式
  • 铁路建设网站多少有哪些做普洱茶网站的
  • 什么做直播网站好互联网平台服务
  • 计算机网站模板网站格式有哪些内容
  • 做企业网站前期需要准备什么设计网站需要多少钱
  • 哪些社交网站做外贸比较好wordpress安装视频
  • wordpress做成可选择语言seo技术 快速网站排名
  • 电商网站管理广州网站建设大公司
  • 湖南州省郴州做竞价的网站有利于优化吗
  • 【MAVLink】XML协议生成C++接口
  • 重庆自助建网站企企业中国纪检监察
  • 毕业设计代做网站代码所有网上购物的网站
  • 电工应用技术网站资源建设有限责任公司成立条件
  • 什么网站做二维码比较好网络电商是做什么的
  • 阿里做网站怎么做长沙百度网站推广优化
  • 免费做公司手机网站网站子页怎么做 视频
  • 公司网站开发说明介绍建设银行网站会员用户名格式
  • 水果电商网站建设相关文献换空间网站备案吗
  • 网站项目开发流程图wordpress标签查看id
  • 百度站长平台验证网站google官网入口手机版
  • 怎么增加网站的反链wordpress 新浪图片
  • 网站功能表多语言建站系统
  • 网站域名空间租用合同app营销推广方案