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

idc 网站源码个人网页怎么做

idc 网站源码,个人网页怎么做,公司网页设计说明300,现在还有疫情吗1、目的 实现自定义二级选项框&#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/wzjs/226822.html

相关文章:

  • 开源的公司网站太原推广团队
  • 铭万做的网站东莞网站建设公司排名
  • 医院网站建设方案站长资源平台
  • 网站建设公司河南采集站seo提高收录
  • 莘县网站建设费用排名第一的助勃药
  • 山东枣庄滕州网站建设seo页面排名优化
  • 网站建设找云尚网络济南做seo外包
  • 科技公司网站设计公司深圳网站制作推广
  • 太平保险网站黑帽seo教程
  • 怎么在别人网站做跳转百度怎样发布作品
  • 电子商务网站建设重点企业培训课程
  • 武汉 网站制作权威seo技术
  • 品牌网站建设哪家公司好网络推广外包公司哪家好
  • 制作企业网站是免费的吗百度提交网站入口
  • 做电影网站收入广告营销案例分析
  • 温州网页设计美工外贸网站谷歌seo
  • 建设网站软文推广多少钱一篇
  • 福田做商城网站建设哪家便宜免费网站外链推广
  • 设计网站汇总百度网站介绍
  • 网站分析报告网页制作软件
  • 无锡高端网站建设咨询软件测试培训
  • 集团网站建设网络公司一手项目对接app平台
  • 如何在路由器上做网站转跳东莞市网络seo推广企业
  • 做网站可以不写代码宁德市疫情
  • wordpress修改首页名称河北百度推广seo
  • 古交网站建设北京seo助理
  • 什么公司做企业网站百度推广开户2400
  • 怎么用路由器做网站crm管理系统
  • 网站建设情况登记表广告投放优化师
  • 有哪些网站是用php做的百度账户托管运营