当前位置: 首页 > 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/180211.html

相关文章:

  • wordpress首页发布图片码迷seo
  • 四川省住房和城乡建设厅官网平台seo网站地图
  • 网站维护界面设计百度关键词排名批量查询工具
  • 深圳网博网站建设营销方案策划
  • 建一个个人网站足球比赛直播
  • 凡科网站怎么修改山东网站seo推广优化价格
  • 网站推荐界面宁波关键词优化企业网站建设
  • WordPress情侣网站快速排名seo
  • 南戴河区网站建设哪家好提高工作效率总结心得
  • 用系统建购物网站广告策划案优秀案例
  • 广元单页网站制作培训机构推荐
  • 有企业邮箱案例的网站郑州怎么优化网站排名靠前
  • 服务器做的网站 怎么使用搜索引擎优化技术有哪些
  • php 网站配置软文写手接单平台
  • 网站的定位分析网站维护一年一般多少钱?
  • 企业网站版面设计技巧网站联盟广告
  • 做网站要先申请域名吗系统优化大师
  • 动态网站的功能与特点怎么推广网站链接
  • 响应式网站工具互联网营销师教材
  • 北京地产网站建设职业培训网络平台
  • 适用于手机的网站怎么建设做营销型网站哪家好
  • 镇江专业网站制作线上推广平台报价
  • html5移动端网站开发海外广告投放公司
  • 清溪网站建设seo联盟
  • wordpress 企业网站模板百度手机浏览器
  • 海淀公司网站搭建广告投放方案
  • 企业建设网站的目的( )网店seo关键词
  • 可以在线做动图的网站黑帽seo技术培训
  • 济南网站建设泰观网络长沙搜索排名优化公司
  • 做网盟行业网站的图片广告的销售软文营销策划