Как скрыть / удалить "?"помочь кнопка "заголовок" диалога в Qt?
Я использую диалоги Qt в одном из моих приложений. Мне нужно скрыть/удалить кнопку справки. Но я не могу найти, где именно я получаю ручку его кнопки помощи. Не уверен, что это конкретный флаг в окне Qt.
8 ответов
по умолчанию Qt:: WindowContextHelpButtonHint флаг в диалогах. Вы можете контролировать это с помощью WindowFlags параметр конструктора диалогового окна.
например, вы можете указать только TitleHint и SystemMenu флаги делать:
QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();
Если добавить Qt:: WindowContextHelpButtonHint флаг вы получите кнопку помощи обратно.
в PyQt вы можете do:
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);
}