Я использую Qt Dialogs в одном из моих приложений. Мне нужно скрыть/удалить кнопку справки. Но я не могу найти, где именно я получаю дескриптор его кнопки помощи. Не уверен, что его конкретный флаг в окне Qt.
Как я могу скрыть/удалить "?" help в строке заголовка Qt Dialog?
Ответ 1
По умолчанию в диалоги добавляется флаг 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.
Ответ 2
Хорошо, я нашел способ сделать это.
Он имеет дело с флажками Window. Итак, вот код, который я использовал:
Qt::WindowFlags flags = windowFlags()
Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;
flags = flags & (~helpFlag);   
setWindowFlags(flags);
Но при этом иногда значок диалога появляется reset. Поэтому, чтобы значок диалога не менялся, вы можете добавить две строки.
QIcon icon = windowIcon();
Qt::WindowFlags flags = windowFlags();
Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;
flags = flags & (~helpFlag);   
setWindowFlags(flags);
setWindowIcon(icon);
		Ответ 3
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
		Ответ 4
Я столкнулся с этой проблемой в Windows 7, Qt 5.2, и комбинация флагов, которая работала лучше всего для меня, была следующей:
Qt:: WindowTitleHint | Qt:: WindowCloseButtonHint
Это дает мне рабочую кнопку закрытия, но без кнопки справки вопросительного знака. Используя только Qt:: WindowTitleHint или Qt:: WindowSystemMenuHint, он избавился от кнопки справки, но также отключил кнопку закрытия.
Как предположил Майкл Бишоп, он играл с примером оконных флагов, который привел меня к этой комбинации. Спасибо!
Ответ 5
 Начиная с Qt 5.10, вы можете отключить эти кнопки глобально с помощью одного атрибута QApplication !
QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);
		Ответ 6
Ответы, приведенные здесь, будут работать, но, чтобы ответить на него самостоятельно, я рекомендую вам запустить пример программы $QTDIR/examples/widgets/windowflags. Это позволит вам протестировать все конфигурации флажков окон и их эффектов. Очень полезно для определения проблем с белыми оконными флагами.
Ответ 7
Можно использовать следующий способ удаления вопросительных знаков по умолчанию для всех диалогов в приложении:
Прикрепите следующий фильтр событий к 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);
  }
		Ответ 8
Я не мог найти слот, но вы можете переопределить виртуальную функцию winEvent.
#if defined(Q_WS_WIN)
bool MyWizard::winEvent(MSG * msg, long * result)
{
    switch (msg->message)
    {
    case WM_NCLBUTTONDOWN:
        if (msg->wParam == HTHELP)
        {
        }
        break;
    default:
        break;
    }
    return QWizard::winEvent(msg, result);
}
#endif