我正试图在Qt中实现类似"组合图标"的东西.
目标:我需要动态设置颜色仅适用于图标部分.
我的想法:由另外两个人组成这个图标.一个图标将根据需要进行着色(可能通过ColorizeEffect)并将其混合在充当覆盖层的第二个图标下.
问题:我尝试了QIconEngine并实现了它的paint方法.ColorizeEffect似乎无法正常工作(即使我尝试使用临时QLabel进行破解 - 当强度设置> 0.0时,由此形成的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) 有像这样的模板类(它被简化以获得我的观点):
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