2013-07-03 3 views
0

Если мы не знаем, является ли элемент Qt видимым или нет, предпочтительнее проверить, есть ли перед ним функция setVisible()?Qt isVisible() до setVisible()?

Есть ли разница в характеристиках, даже если это не важно?

if (ui->elem->isVisible() == false) 
    ui->elem->setVisible(true); 
+0

На какой платформе вы хотите выполнить профилирование? –

+0

@KamilKlimek Я использую GNU/Linux, в настоящее время Debian – baptx

+0

valgrind, oprofile. У QtCreator есть опция «run and profile», встроенная в –

ответ

2

Я решил проверить источник 4.8.0 - это не сложно. Ответ, похоже, заключается в том, что сначала не будет никакой проверки, но профилирование будет единственным способом узнать наверняка.

void QWidget::setVisible(bool visible) 
{ 
    if (visible) { // show 
     if (testAttribute(Qt::WA_WState_ExplicitShowHide) && !testAttribute(Qt::WA_WState_Hidden)) 
      return; 
     Q_D(QWidget); 
     //... 
    } else { // hide 
     if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden)) 
      return; 
     //... 
    } 
} 
+0

Спасибо, похоже, что функция будет напрямую возвращаться, если элемент уже виден. В следующий раз я постараюсь проверить себя. Каков наилучший способ профилирования? – baptx

+0

Жаль, что я знал ... Я еще не нашел тот, который мне нравится. Найдите вокруг SO параметры. – Phlucious

+0

Если кому-то нужна прямая ссылка на полный источник Qt 4.8, его можно проверить онлайн из официального репозитория: http://qt.gitorious.org/qt/qt/blobs/raw/efcbcd3e23b530443b55374e63db39e27b21ad9c/src/gui/kernel/qwidget. CPP – baptx

2

Это не имеет значения. Вы можете посмотреть на источник Qt, чтобы убедиться сами.

+1

, может быть, они обрабатывают проверку isVisible внутри функции setVisible? – baptx

+1

Похоже, что они есть. – Phlucious

Смежные вопросы