Я хочу удалить "?"-кнопку из диалога Qt, как объяснено здесь, но почему-то это не работает.
Вот мой код:
Qt::WindowFlags flags;
flags = (Qt::Dialog | Qt::WindowStaysOnTopHint) &
~Qt::WindowContextHelpButtonHint;
setWindowFlags( flags );
Я думаю, что что-то не так с побитовыми операторами, но я не знаю, что...
Для меня это работает нормально:
QDialog *dialog = new QDialog;
Qt::WindowFlags flags(Qt::WindowTitleHint);
dialog->setWindowFlags(flags);
Однако наиболее распространенным способом является передача флагов в конструкторе:
QDialog *dialog = new QDialog(0, Qt::WindowTitleHint);
EDIT: Я думаю, что существует недопонимание относительно операторов QFlags (см. комментарии ниже). Этот пример может прояснить ситуацию:
Qt::WindowFlags flags(Qt::Dialog | Qt::WindowStaysOnTopHint);
qDebug() << flags.testFlag(Qt::WindowContextHelpButtonHint); // false because the flag hasn't been added
flags = flags | Qt::WindowContextHelpButtonHint;
qDebug() << flags.testFlag(Qt::WindowContextHelpButtonHint); // true because it has been added
flags = flags & ~Qt::WindowContextHelpButtonHint;
qDebug() << flags.testFlag(Qt::WindowContextHelpButtonHint); // false because it has been removed
Предпоследняя строка кода удаляет Qt::WindowContextHelpButtonHint
из flags
. Это не добавляет "отрицательный" флаг.
По крайней мере, это мое понимание.