QDialog - Изменить флаги по умолчанию, чтобы исключить? кнопка

По умолчанию QDialog применяет флаг (я не совсем уверен, какой), который заставляет кнопку со знаком вопроса появляться в правом верхнем углу. У меня есть класс Login, который наследуется от QDialog, и я смог избавиться от этой кнопки вопросительного знака, явно передав более минимальный набор таких флагов.

Login::Login(QWidget *parent) : QDialog(parent, Qt::WindowCloseButtonHint), ui(new Ui::Login) {}

Однако я использую в своей программе и другие диалоги, такие как QMessageBox и QInputDialog.

Итак, мой вопрос: каковы все флаги по умолчанию, которые использует QDialog, и есть ли способ, которым я могу установить флаги по умолчанию, чтобы мне не приходилось передавать флаги самостоятельно (уязвимо, возможно, опустить некоторые из них, которые важны для кросс-платформенной способности ) каждый раз, когда я инициализирую новый QDialog?


person Assimilater    schedule 12.04.2015    source источник


Ответы (1)


Вы можете просто сделать:

Login::Login(QWidget *parent) : QDialog(parent, QDialog( ).windowFlags() & ~Qt::WindowContextHelpButtonHint ), ui(new Ui::Login) {}

~ — оператор инвертирования битов.

windowFlags() содержит флаги по умолчанию для QDialog.

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

Вы спрашивали о флагах по умолчанию:

QFlags(0x1|0x2|0x1000|0x2000|0x10000|0x8000000)

Чтобы создать значение по умолчанию, вы можете создать глобальную переменную, содержащую предпочитаемые вами WindowFlags.

Например:

QFlags< Qt::WindowFlags > defaultFlags;

defaultFlags = QDialog( ).windowFlags( );

defaultFlags = defaultFlags & ~Qt::WindowContextHelpButtonHint;

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


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

class CustomDialog : public QDialog
{
    Q_OBJECT

public:
    explicit CustomDialog( QWidget *parent = 0);

};
person deW1    schedule 12.04.2015
comment
Я понимаю. Как насчет изменения значения по умолчанию, чтобы мне не приходилось вводить/копировать и вставлять операцию отрицания для каждого другого экземпляра, который я вызываю? - person Assimilater; 12.04.2015
comment
Эта мысль пришла мне в голову. Я надеялся на что-то, что действительно обновит значение по умолчанию, но это может быть невозможно (не знаю, есть ли у Qt метод для раскрытия этого или нет). Если вы можете подтвердить, что такой метод не раскрыт, или если лучший ответ не появится в течение 24 часов, я отмечу это как ответ. - person Assimilater; 12.04.2015
comment
@Assimilater Я сомневаюсь, что это возможно, по крайней мере, я бы не знал, как это сделать, но другим решением было бы просто написать оболочку вокруг QDialog, которую вы можете полностью изменить по своему вкусу. По крайней мере, я бы так сделал - person deW1; 12.04.2015
comment
Да, хотя это не помогает QMessageBox, QLineEdit или любому другому шаблону диалога. - person Assimilater; 13.04.2015
comment
Я имел в виду QInputDialog, а не QLineEdit (все еще новичок в qt, и это видно, ха-ха) - person Assimilater; 13.04.2015
comment
@Assimilater Вы не можете изменить значения по умолчанию без изменения исходного кода. Лучше всего использовать вспомогательные функции для создания диалогов, в которых вы устанавливаете нужные флаги. - person thuga; 13.04.2015
comment
@Assimilater вы также можете создать оболочку для обертывания QInputDialog + QLineEdit в - person deW1; 13.04.2015
comment
Угадай, что я тогда сделаю. Спасибо, парни :) - person Assimilater; 13.04.2015