小编GPU*_*ant的帖子

使用QIconEngine和透明度定制QIcon

我正试图在Qt中实现类似"组合图标"的东西.

目标:我需要动态设置颜色仅适用于图标部分.

我的想法:由另外两个人组成这个图标.一个图标将根据需要进行着色(可能通过ColorizeEffect)并将其混合在充当覆盖层的第二个图标下.

问题:我尝试了QIconEngine并实现了它的paint方法.ColorizeEffect似乎无法正常工作(即使我尝试使用临时QLabel进行破解 - 当强度设置> 0.0时,由此形成的QIcon为空).但这不是主要问题.问题是,无论我做什么,我都会为这个"组合"图标获得一些默认的彩色背景.
带QIcons的两个QToolButtons,左图标是简单的QIcon,右边是我的


这是我的代码片段:

class QComposedIconEngine: public QIconEngine
{
public:
   QComposedIconEngine();
   ~QComposedIconEngine();
   virtual void paint ( QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state );
   virtual QIconEngine * clone(void) const;
public:
   QIcon m_qIconA;
   QIcon m_qIconB;
   QColor m_qColor;
};
Run Code Online (Sandbox Code Playgroud)

这是我对paint(...)的实现:

void CLxQComposedIconEngine::paint ( QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state )
{
   QBrush brush = painter->background();
   QColor color = brush.color();
   brush.setColor( Qt::transparent ); …
Run Code Online (Sandbox Code Playgroud)

c++ user-interface qt qtgui qicon

7
推荐指数
1
解决办法
1317
查看次数

模板类型的模板方法专门化

有像这样的模板类(它被简化以获得我的观点):

    template <typename TYPE> class Wrapper
    {
       TYPE m_tValue;
       void DoSomething();
    };

    template <typename TYPE> class Array
    {
       TYPE * m_pArray;
    };
Run Code Online (Sandbox Code Playgroud)

是否有可能(以及如何?)专门化方法Wrapper<Array<TYPE>>::DoSomething()

我的意思是,我可以int通过定义来专门化这种类型的方法:

    template <> void Wrapper<int>::DoSomething(){...};
Run Code Online (Sandbox Code Playgroud)

但是我如何专注于此Array但保持Array不专业?当然,我可以写:

    template <> void Wrapper<Array<int>>::DoSomething(){...}; 
Run Code Online (Sandbox Code Playgroud)

但这根本不是通用的,与模板的优势相矛盾.

我尝试过类似的东西

    template <typename T> void Wrapper<Array<T>>::DoSomething(){...};
Run Code Online (Sandbox Code Playgroud)

但我有编译错误.

我想知道这样做的正确方法是什么?谢谢

c++ templates partial-specialization template-specialization

4
推荐指数
1
解决办法
108
查看次数