消除QGraphics生成的"unused parameter 'widget'"警告的干净方法项目::p aint

Clean way to eliminate "unused parameter 'widget'" warning generated by QGraphicsItem::paint

本文关键字:方法 项目 QGraphics aint 警告 parameter unused 消除 widget      更新时间:2023-10-16

QGraphicsItem::paint具有以下签名:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)

当我创建自定义QGraphicsItem时,我必须提供该函数的实现。问题是……我从不需要使用optionwidget参数,但由于显而易见的原因,我不能只是删除它们。我总是看到这些编译器警告:

警告:未使用的参数' widget '

警告:未使用的参数' option '

是否有适当的方法来摆脱这些警告?我知道我可以通过在函数中提到未使用的参数来隐藏它们,但这是一个非常肮脏的解决方案,我想知道是否有更好的选择。

省略参数名:

void paint( ..., QWidget* ) {
或者使用Q_UNUSED宏:
void paint( ..., QWidget* widget ) {
    Q_UNUSED( widget )
    ...

不要为未使用的参数提供参数名。例如(我不确定你的"事件"指的是什么),为了摆脱warning: unused parameter ‘option’,将你的签名更改为:

void paint(QPainter *painter, const QStyleOptionGraphicsItem * /* unused */, QWidget *widget)

(就警告而言,/* unused */标记是不必要的,但我发现它对人类读者很有用。)

基本上有三种适当的方法来静音未使用参数的编译器警告:

显式地将未使用的形参强制转换为void:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
           QWidget *widget)
{
    (void)option;
    (void)widget;
    // ...
}

此模式符合标准,并且被程序员广泛理解。像GCC这样的编译器看到使用了参数,因此不会发出警告,并且它们优化了这些行,因为它们是无操作的(即没有效果)。

或者,你可以使用Qt的Q_UNUSED宏:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
           QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);
    // ...
}

对于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

使用Q_UNUSED更容易阅读,并且必须用于对Qt的贡献。

注释掉参数名的第三个选项:

void paint(QPainter *painter, const QStyleOptionGraphicsItem * /* option */,
           QWidget * /* widget */)
{
    // ...
}

这可能更难以阅读。此外,它可能会增加完全删除参数名称的诱惑——这可能会使函数更难理解。当修改代码以使用之前未使用的参数时,这种样式当然也比其他样式涉及更多的编辑操作。

使用Qt宏:Q_UNUSED来完成

可以省略参数名,告诉编译器它没有被使用:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)

您还可以在.pro文件中设置编译标志。这些是gcc的标志:

QMAKE_CXXFLAGS += -Wno-unused-parameter
QMAKE_CFLAGS += -Wno-unused-parameter

这样你就不需要修改你的代码来抑制这个警告。

这可能不适合每个人,但这是另一个选择。

相关文章: