Как я могу скрыть/удалить "?"кнопка справки в" строке заголовка " диалогового окна Qt?


Я использую Qt диалоги в одном из моих приложений. Мне нужно скрыть / удалить кнопку справки. Но я не могу найти, где именно я получаю ручку к его кнопке помощи. Не уверен, что это определенный флаг в окне Qt.

8 58

8 ответов:

по умолчанию Qt:: WindowContextHelpButtonHint флаг в диалогах. Вы можете управлять этим с помощью WindowFlags параметр конструктора диалогового окна.

например, вы можете указать только TitleHint и SystemMenu флаги делать:

QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();

Если добавить Qt:: WindowContextHelpButtonHint флаг вы получите кнопку справки обратно.

в PyQt вы можете делать:

from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()

более подробную информацию о флагах окна можно найти на WindowType перечисление в документации Qt.

Ок , я нашел способ сделать это.

Он имеет дело с флагами окна. Итак, вот код, который я использовал:

Qt::WindowFlags flags = windowFlags()

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   
setWindowFlags(flags);

но при этом иногда значок диалогового окна сбрасывается. Поэтому, чтобы убедиться, что значок диалогового окна не изменяется, вы можете добавить две строки.

QIcon icon = windowIcon();

Qt::WindowFlags flags = windowFlags();

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   

setWindowFlags(flags);

setWindowIcon(icon);
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);

Я столкнулся с этой проблемой в Windows 7, Qt 5.2, и комбинация флагов, которая лучше всего работала для меня, была такой:

Qt:: WindowTitleHint | Qt:: WindowCloseButtonHint

Это дает мне рабочую кнопку закрытия, но без кнопки помощи вопросительного знака. Используя только Qt::WindowTitleHint или Qt:: WindowSystemMenuHint избавился от кнопки справки, но он также отключил кнопку закрытия.

Как предположил Майкл Бишоп, он играл с подоконниками пример, который привел меня к этой комбинации. Спасибо!

начиная с Qt 5.10, вы можете отключить эти кнопки глобально с помощью одного QApplication атрибут!

QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton)

ответы, перечисленные здесь, будут работать, но чтобы ответить на него самостоятельно, я бы рекомендовал вам запустить пример программы $QTDIR/examples/widgets/windowflags. Это позволит вам протестировать все конфигурации флагов окон и их эффекты. Очень полезно для выяснения проблем squirrelly windowflags.

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

прикрепите следующий фильтр событий к QApplication где-то в начале вашей программы:

  bool eventFilter (QObject *watched, QEvent *event) override
  {
    if (event->type () == QEvent::Create)
      {
        if (watched->isWidgetType ())
          {
            auto w = static_cast<QWidget *> (watched);
            w->setWindowFlags (w->windowFlags () & (~Qt::WindowContextHelpButtonHint));
          }
      }
    return QObject::eventFilter (watched, event);
  }

Я не мог найти слот, но вы можете переопределить виртуальный