QGraphicsItem::paint 有以下签名:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Run Code Online (Sandbox Code Playgroud)
当我创建自定义QGraphicsItems时,我必须为此函数提供实现.事情是......我永远不需要使用option和widget参数,但我不能仅仅因为显而易见的原因删除它们.我总是看到这些编译器警告:
警告:未使用的参数'widget'
警告:未使用的参数'选项'
是否有适当的摆脱这些警告?我知道我可以通过提及函数中未使用的参数来隐藏它们,但这是一个非常脏的解决方案,我想知道是否有更好的选择.
Fra*_*eld 30
省略参数名称:
void paint( ..., QWidget* ) {
Run Code Online (Sandbox Code Playgroud)
或使用Q_UNUSED宏:
void paint( ..., QWidget* widget ) {
Q_UNUSED( widget )
...
Run Code Online (Sandbox Code Playgroud)
Ben*_*ing 22
不要为未使用的参数提供参数名称.例如(我不确定你的"事件"指的是什么),要摆脱warning: unused parameter ‘option’,将你的签名改为:
void paint(QPainter *painter, const QStyleOptionGraphicsItem * /* unused */, QWidget *widget)
Run Code Online (Sandbox Code Playgroud)
(/* unused */就警告而言,标签是不必要的,但我发现它对人类读者很有用.)
您基本上有三种正确的方法来消除未使用的参数编译器警告:
将未使用的参数显式转换为 void:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
(void)option;
(void)widget;
// ...
}
Run Code Online (Sandbox Code Playgroud)
这种模式符合标准并且被程序员广泛理解。像 GCC 这样的编译器看到使用了该参数,因此不会发出警告,并且他们优化了这些行,因为它们是无操作(即没有效果)。
或者,您可以使用 Qt 的Q_UNUSED宏:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
// ...
}
Run Code Online (Sandbox Code Playgroud)
对于 GCC 和其他人,它也扩展到(void)-cast 模式,但它也可能包括用于模糊编译器的变通方法,这还不够。例如,在 Qt 5.4.1 中,它被定义为:
#if defined(Q_CC_RVCT)
template <typename T>
inline void qUnused(T &x) { (void)x; }
# define Q_UNUSED(x) qUnused(x);
#else
# define Q_UNUSED(x) (void)x;
#endif
Run Code Online (Sandbox Code Playgroud)
使用Q_UNUSED可以说更容易阅读,并且必须用于对 Qt 的贡献。
注释掉参数名称的第三个选项:
void paint(QPainter *painter, const QStyleOptionGraphicsItem * /* option */,
QWidget * /* widget */)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
这可以说更难阅读。此外,它可能会增加完全删除参数名称的诱惑——这可能会使函数更难理解。当然,在更改代码以使用未使用的参数之前,此样式还涉及比其他样式更多的编辑操作。
| 归档时间: |
|
| 查看次数: |
15601 次 |
| 最近记录: |