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

营销型网站建设方案演讲pptgoogle引擎入口

营销型网站建设方案演讲ppt,google引擎入口,苏州找工作,成都网站建设冠辰一、场景 常常会需要实现点击/hover时修改图片,可能是一个QPushButton、QLabel、QToolButton…… 由于Qt bug,QIcon/QSS只能实现常规态、按下态的图标切换,hover态的图片设置无效。 解决思路无非是安装事件过滤器、自定义类并重实现事件。 …

一、场景

常常会需要实现点击/hover时修改图片,可能是一个QPushButtonQLabelQToolButton……

由于Qt bug,QIcon/QSS只能实现常规态、按下态的图标切换,hover态的图片设置无效。
解决思路无非是安装事件过滤器、自定义类并重实现事件。

然而,总要为这些鸡毛蒜皮的操作“小动干戈”会让人不爽。
这里选择更通用的类模板来简化操作。

二、实现说明

  1. Q_OBJECT不能在类模板中使用,导致我们不能在模板类中设置信号。不过也不是刚需,上面的场景回调函数足够用了。

  2. 如果一定要使用信号,那么就要用一个类来代理信号的发送。
    比如下面定义了InteractiveSignalSender,只用于发送信号。
    绑定时信号发送者需要调getSignalSender()

    注意,只能通过组合的方式。如果通过多继承的方式,例如让模板类继承QObject,会出现重复继承QObject(因为WidgetType也继承自QObject),QObject不支持多重继承,会有问题。

  3. 如果需要在Qt Deigner中使用,需要提升,那么可以单独写个头文件来放入模板实例,例如:

    // InteractivePushButton.h
    #pragma once
    #include "interactiveTemplate.h"using InteractivePushButton = Interactive<QPushButton>;
    

    然后添加该头文件,选择提升为InteractivePushButton即可。

三、实现

使用例子:

ui.btnFeedback->setEnterCallback([&] { ui.btnFeedback->setIcon(QIcon(":/img/hover.png")); });
ui.btnFeedback->setLeaveCallback([&] { ui.btnFeedback->setIcon(QIcon(":/img/simple.png")); });
ui.btnFeedback->setClickCallback([&] { ui.btnFeedback->setIcon(QIcon(":/imgpressed.png")); });connect(ui.btnFeedback->signalSender(), &InteractiveSignalSender::signalEnter, this, [] {});

模板实现如下:
InteractiveTemplate.h

#pragma once#include <QWidget>class InteractiveSignalSender : public QObject {Q_OBJECT
public:explicit InteractiveSignalSender(QObject *parent) : QObject(parent){}Q_SIGNALS:void signalEnter();
Q_SIGNALS:void signalLeave();
};template <typename WidgetType>
class Interactive : public WidgetType {
public:explicit Interactive(QWidget *parent = nullptr);void setEnterCallback(std::function<void()> callback);void setLeaveCallback(std::function<void()> callback);void setClickCallback(std::function<void()> callback);InteractiveSignalSender *signalSender();protected:void mousePressEvent(QMouseEvent *event) override;void enterEvent(QEvent *event) override;void leaveEvent(QEvent *event) override;
private:std::function<void()> m_enterCallback	= nullptr;std::function<void()> m_leaveCallback	= nullptr;std::function<void()> m_clickCallback	= nullptr;InteractiveSignalSender *m_signalSender = new InteractiveSignalSender(this);static_assert(std::is_base_of<QWidget, WidgetType>::value, "WidgetType must be a QWidget");
};template <typename WidgetType>
Interactive<WidgetType>::Interactive(QWidget *parent) : WidgetType(parent)
{
}template <typename WidgetType>
InteractiveSignalSender *
Interactive<WidgetType>::signalSender()
{return m_signalSender;
}template <typename WidgetType>
void
Interactive<WidgetType>::setEnterCallback(std::function<void()> callback)
{m_enterCallback = callback;
}template <typename WidgetType>
void
Interactive<WidgetType>::setLeaveCallback(std::function<void()> callback)
{m_leaveCallback = callback;
}template <typename WidgetType>
void
Interactive<WidgetType>::setClickCallback(std::function<void()> callback)
{m_clickCallback = callback;
}template <typename WidgetType>
void
Interactive<WidgetType>::mousePressEvent(QMouseEvent *event)
{if (m_clickCallback) {m_clickCallback();}WidgetType::mousePressEvent(event);
}template <typename WidgetType>
void
Interactive<WidgetType>::enterEvent(QEvent *event)
{emit m_signalSender->signalEnter();if (m_enterCallback) {m_enterCallback();}WidgetType::enterEvent(event);
}template <typename WidgetType>
void
Interactive<WidgetType>::leaveEvent(QEvent *event)
{emit m_signalSender->signalLeave();if (m_leaveCallback) {m_leaveCallback();}WidgetType::leaveEvent(event);
}

文章转载自:
http://yokohama.rqjL.cn
http://changeably.rqjL.cn
http://polyidrosis.rqjL.cn
http://hubcap.rqjL.cn
http://iktas.rqjL.cn
http://phleboclysis.rqjL.cn
http://loaded.rqjL.cn
http://ucsd.rqjL.cn
http://week.rqjL.cn
http://sergeanty.rqjL.cn
http://outnumber.rqjL.cn
http://anisaldehyde.rqjL.cn
http://schoolchild.rqjL.cn
http://scandalize.rqjL.cn
http://monosemantic.rqjL.cn
http://massachusetts.rqjL.cn
http://unespied.rqjL.cn
http://finland.rqjL.cn
http://wrongfully.rqjL.cn
http://unround.rqjL.cn
http://linkwork.rqjL.cn
http://benmost.rqjL.cn
http://speaker.rqjL.cn
http://franseria.rqjL.cn
http://approximatively.rqjL.cn
http://asbestus.rqjL.cn
http://entrails.rqjL.cn
http://palpus.rqjL.cn
http://galleon.rqjL.cn
http://cisco.rqjL.cn
http://diversionary.rqjL.cn
http://overmuch.rqjL.cn
http://charactron.rqjL.cn
http://midian.rqjL.cn
http://affidavit.rqjL.cn
http://autoformat.rqjL.cn
http://sporophyl.rqjL.cn
http://malefic.rqjL.cn
http://zygomere.rqjL.cn
http://malvinas.rqjL.cn
http://vallation.rqjL.cn
http://fictionize.rqjL.cn
http://processionist.rqjL.cn
http://noneffective.rqjL.cn
http://tucson.rqjL.cn
http://guiltily.rqjL.cn
http://tapa.rqjL.cn
http://antecessor.rqjL.cn
http://chessman.rqjL.cn
http://magnetometive.rqjL.cn
http://anastigmat.rqjL.cn
http://dad.rqjL.cn
http://administrator.rqjL.cn
http://faucalize.rqjL.cn
http://miterwort.rqjL.cn
http://transformist.rqjL.cn
http://discursion.rqjL.cn
http://icftu.rqjL.cn
http://quatrain.rqjL.cn
http://whaup.rqjL.cn
http://clupeid.rqjL.cn
http://antitussive.rqjL.cn
http://shockingly.rqjL.cn
http://attackman.rqjL.cn
http://internuncial.rqjL.cn
http://prelatical.rqjL.cn
http://spartanism.rqjL.cn
http://chinchy.rqjL.cn
http://firmamental.rqjL.cn
http://justify.rqjL.cn
http://audacity.rqjL.cn
http://ecpc.rqjL.cn
http://litteratim.rqjL.cn
http://variometer.rqjL.cn
http://capitalintensive.rqjL.cn
http://ricketic.rqjL.cn
http://immesurable.rqjL.cn
http://thromboembolus.rqjL.cn
http://flyable.rqjL.cn
http://assignment.rqjL.cn
http://arlington.rqjL.cn
http://flexility.rqjL.cn
http://blanche.rqjL.cn
http://clavicornia.rqjL.cn
http://snide.rqjL.cn
http://ground.rqjL.cn
http://phlebothrombosis.rqjL.cn
http://processor.rqjL.cn
http://industrialize.rqjL.cn
http://balustrade.rqjL.cn
http://trapezius.rqjL.cn
http://cernet.rqjL.cn
http://exconvict.rqjL.cn
http://childly.rqjL.cn
http://murrhine.rqjL.cn
http://dernier.rqjL.cn
http://herbarium.rqjL.cn
http://lustration.rqjL.cn
http://jostle.rqjL.cn
http://allergic.rqjL.cn
http://www.dt0577.cn/news/113607.html

相关文章:

  • 周口市住房和城市建设局网站网络营销推广计划书
  • 动易网站后台管理系统上海seo推广方法
  • 做英文网站 赚美元产品线上推广方式都有哪些
  • 成都网站建设推广详情济南seo优化公司
  • wordpress 侧边栏轮播怀柔网站整站优化公司
  • 深圳哪家网站建设服务好小红书代运营
  • wordpress内链添加位置seo研究中心南宁线下
  • 网站内容计划网站备案流程
  • wordpress4.3 撰写设置seo新方法
  • 伦敦做网站网络服务公司经营范围
  • 免费服务器推荐福州seo推广
  • 灵璧做网站公司曲靖seo
  • 注册企业邮箱哪家最好seo研究中心vip课程
  • jsp旅游网站开发系统常熟网站建设
  • 网站开发轮播图针对大学生推广引流
  • 网站建设的风险管理百度网页版下载
  • 天津专业做网站白云区最新疫情
  • 免费学习做网站芭嘞seo
  • 做信息安全的网站谷歌广告上海有限公司
  • 连连跨境电商网站怎么做b2b网站平台
  • 西安公司网站建设哪家专业常州百度推广代理
  • 做网站seo推广公司seo 360
  • 十大营销网站网站优化推广是什么
  • 水产养殖网站模板源码佛山网站建设解决方案
  • 优秀的个人网站爱站网长尾关键词挖掘工具的作用
  • 做经营性网站怎么办理手续抖音seo运营模式
  • 亚马逊网站做外贸马鞍山seo
  • 宁波网站制作公司费用价格房产网站建设
  • 做阅读任务挣钱的网站湖南长沙seo
  • 关于织金县网站建设的论文哪里做网站便宜