Чистый способ устранить предупреждение «неиспользуемый параметр« виджет »», сгенерированное QGraphicsItem :: paint - PullRequest
15 голосов
/ 23 апреля 2011

QGraphicsItem::paint имеет следующую подпись:

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

Когда я создаю пользовательские QGraphicsItem s, я должен предоставить реализацию для этой функции.Дело в том, что ... Мне никогда не нужно использовать параметры option и widget, но я не могу просто удалить их по понятным причинам.Я всегда вижу эти предупреждения компилятора:

предупреждение: неиспользуемый параметр 'виджет'

предупреждение: неиспользуемый параметр 'опция'

Есть ли подходящее дляизбавиться от этих предупреждений?Я знаю, что могу скрыть их, упомянув неиспользуемые параметры в функции, но это очень грязное решение, и я хотел бы знать, есть ли лучшие варианты.

Ответы [ 5 ]

29 голосов
/ 23 апреля 2011

Либо не указывать имя параметра:

void paint( ..., QWidget* ) {

или используйте макрос Q_UNUSED:

void paint( ..., QWidget* widget ) {
    Q_UNUSED( widget )
    ...
22 голосов
/ 23 апреля 2011

Не указывайте имена параметров для неиспользуемых параметров.Например (я не уверен, что означает ваше «событие»), чтобы избавиться от warning: unused parameter ‘option’, измените свою подпись на:

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

(тег /* unused */ не нужен, посколькупредупреждение идет, но оно полезно для читателя, я нахожу.)

4 голосов
/ 29 марта 2015

Как правило, у вас есть три способа заставить замолчать предупреждение компилятора неиспользованных параметров:

Явно приведите неиспользуемые параметры к void:

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

Этот шаблон соответствует стандарту и широко применяется.понимают программисты.Компиляторы, такие как GCC, видят, что параметр используется, поэтому не выдают предупреждение, и они оптимизировали эти строки, потому что они не используются (т.е. не имеют эффекта).

В качестве альтернативы, вы можете использовать Qt's 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 */)
{
    // ...
}

Возможно, это сложнее для чтения.Кроме того, это, возможно, увеличивает соблазны полностью удалить имена параметров, что может усложнить понимание функции.При изменении кода, чтобы использовать ранее неиспользуемые параметры, этот стиль, конечно, также включает в себя больше операций редактирования, чем другие.

4 голосов
/ 23 апреля 2011

используйте макрос Qt: Q_UNUSED, чтобы сделать это

2 голосов
/ 23 апреля 2011

Вы можете опустить имя параметра, чтобы сообщить компилятору, что он не используется:

void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...