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

网站建设头像新浪舆情通

网站建设头像,新浪舆情通,人和动物做的网站,武汉高端定制网站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/205194.html

相关文章:

  • 北京高端网站建设咸阳青岛百度关键词优化
  • 网页美工设计师工资seo是什么意思蜘蛛屯
  • 宁波网络公司做网站什么叫做关键词
  • 学校网站建设培训网络营销策略有哪几种
  • 南宁做网站公司360提交入口网址
  • 建设银行大学华东学院网站seo英文怎么读
  • 南昌做网站和微信小程序的公司seo技术助理
  • 聊城做网站的网络公司郑州做网络营销渠道
  • 星巴克网站建设方案免费涨1000粉丝网站
  • 个人注册网站怎么注册b站推广有用吗
  • 手机网站无响应百度竞价开户多少钱
  • ADPR国际传媒网站建设免费做网站软件
  • 网站建设公司利润率1元购买域名
  • 房地产网站大全青岛seo推广专员
  • 怎么做网站免费的网络推广外包业务销售
  • 网络营销专业代码seo搜索引擎是什么意思
  • 广州网站建设优化公司长沙网站策划
  • 本地郑州网站建设国内最新十大新闻
  • 网站建设 案例代写文案的软件
  • 潍坊学网站建设全渠道营销案例
  • 加强志鉴网站建设长沙网络营销哪家平台专业
  • 如何给网站增加外链目前常用的搜索引擎有哪些
  • 首涂模板网站google ads 推广
  • wordpress有多大的数据量seo好seo
  • 扬州做网站公司有哪些目前搜索引擎排名
  • 北京专业网站建设公司百度搜索量最大的关键词
  • 做网站设计用什么软件最好如何网络媒体推广
  • 市住房城市建设委网站网站建设公司好
  • wordpress 建站完整视频教程谷歌推广外包
  • 做自媒体的网站有哪些交换友情链接的途径有哪些