C++ QDialog-更改默认标志以排除?按钮

C++ QDialog-更改默认标志以排除?按钮,c++,qt,qdialog,C++,Qt,Qdialog,默认情况下,QDialog应用一个标志(我不确定是哪个标志)使问号按钮出现在右上角。我有一个类Login,它继承自QDialog,我可以通过显式地传递一组更简单的标志来摆脱这个问号按钮 Login::Login(QWidget *parent) : QDialog(parent, Qt::WindowCloseButtonHint), ui(new Ui::Login) {} 但是,我也在程序中使用其他对话框,如QMessageBox和QInputDialog 因此,我的问题是:QDialog

默认情况下,
QDialog
应用一个标志(我不确定是哪个标志)使问号按钮出现在右上角。我有一个类
Login
,它继承自
QDialog
,我可以通过显式地传递一组更简单的标志来摆脱这个问号按钮

Login::Login(QWidget *parent) : QDialog(parent, Qt::WindowCloseButtonHint), ui(new Ui::Login) {}
但是,我也在程序中使用其他对话框,如
QMessageBox
QInputDialog

因此,我的问题是:
QDialog
使用的所有默认标志是什么?有没有一种方法可以设置默认标志,这样我就不必自己传递标志了(可能会忽略一些对跨平台能力很重要的标志)每次我初始化一个新的
QDialog

你可以做:

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;

我懂了。更改默认值怎么样,这样我就不必为我调用的每个实例键入/复制粘贴否定操作了?这个想法在我脑海中闪过。我希望有一些东西能够更新默认值,但这可能是不可能的(不知道Qt是否有一个方法来公开它)。如果你能确认这样一个方法没有公开,或者如果24小时内没有更好的答案出现,我将把它标记为答案。@同化者,我怀疑这是可能的,至少我不知道怎么做,但不同的解决方案是在QDialog周围写一个包装器,你可以根据自己的喜好完全修改它。至少我会这么做it@Assimilater在不修改源代码的情况下,无法更改默认值。最好的选择是使用帮助函数来创建对话框,您可以在其中设置所需的标志。@同样,您也可以创建一个包装器来包装QInputDialog+QLineEdit
class CustomDialog : public QDialog
{
    Q_OBJECT

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

};