c++ 清除QGraphicsItem::paint生成的“未使用参数”小工具“”警告的干净方法

m3eecexj  于 2023-01-06  发布在  其他
关注(0)|答案(6)|浏览(128)

QGraphicsItem::paint具有以下签名:

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

当我创建定制的QGraphicsItem时,我必须为这个函数提供一个实现。问题是...我从来不需要使用optionwidget参数,但我不能因为显而易见的原因就删除它们。我总是看到这些编译器警告:
警告:未使用的参数'widget'
警告:未使用的参数“option”
有没有适当的方法来消除这些警告?我知道我可以通过在函数中提到未使用的参数来隐藏它们,但这是一个非常肮脏的解决方案,我想知道是否有更好的选择。

gjmwrych

gjmwrych1#

忽略参数名称:

void paint( ..., QWidget* ) {

或使用Q_UNUSED宏:

void paint( ..., QWidget* widget ) {
    Q_UNUSED( widget )
    ...
vjrehmav

vjrehmav2#

不要为未使用的参数提供参数名。例如(我不确定您的“event”指的是什么),要去掉warning: unused parameter ‘option’,请将您的签名更改为:

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

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

ztigrdn8

ztigrdn83#

基本上有三种适当的方法可以使未使用的参数编译器警告静音:
将未使用的参数显式强制转换为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 */)
{
    // ...
}

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

zhte4eai

zhte4eai4#

使用Qt宏:Q_UNUSED来完成此操作

l0oc07j2

l0oc07j25#

您可以省略参数名称,以告知编译器未使用该参数:

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

qcuzuvrc6#

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

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

这样,您就不必更改代码来取消此警告。
这可能不适合所有人,但它是另一种选择。

相关问题