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

备案 网站名字为什么要建设双端网站

备案 网站名字,为什么要建设双端网站,印象笔记wordpress同步,做vlogger的网站有哪些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/818926.html

相关文章:

  • 抖音网站建设的基本情况如何建立营销网络
  • 如何替换网站四川微信小程序代理
  • 长春网页网站制作景安搭建wordpress
  • 和龙建设局网站无网站如何做淘宝客
  • 做天猫网站要多少钱注册网站的公司名字
  • php和c 做网站的区别安卓商城网站开发
  • 专业模板建站服务南昌个人做网站
  • 青海省建设工程监理协会网站优化软件是什么意思
  • 百度网站怎样优化排名网站 设计 电商
  • 大淘客网站怎么做设计官网有什么好处
  • 门户网站建设情况自查汇报oa网站开发
  • 网站个性化设计杭州简单网技术有限公司
  • 国家车辆保险网站福州模板建站哪家好
  • 有哪些公司建设网站房地产最新消息三个不低于
  • 个人网站 百度推广linux建设门户网站
  • 购物网站建设 费用一个网站开发的意义
  • 网站建设越秀seo课程培训班
  • 深圳航空公司官方网站首页网络推广网站建设软件定制
  • 太原网站优化培训泉州惠安网站建设
  • 做网站付款会有凭证吗网站的优化策略方案
  • 榆林做网站的公司旅游企业网站建设工作的通知
  • 一个人做网站的swot四川建设局网站首页
  • 广州建筑公司招聘网站wordpress发文章下载
  • 苏州交通网站建设网站建设 北京 淘宝
  • 校园网上超市网站建设推广以公开的文化
  • 软件下载网站排行新建网站求友链平台
  • 做苗木免费网站网上销售培训课程
  • 怀化做网站网站百度收录是什么意思
  • 企业网站网页设计有哪些怎样优化网站关键词
  • 做网站寄生虫百度上开个网站怎么做