QDialog - 更改默认标志以排除?按键

时间:2015-04-12 17:51:58

标签: c++ qt qdialog

默认情况下,QDialog会在右上角显示一个问号按钮的标记(我不确定是哪个)。我有一个继承自Login的类QDialog,我可以通过显式传递一组更小的标记来摆脱这个问号按钮

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

但是,我也在我的程序中使用其他对话框,例如QMessageBoxQInputDialog

所以我的问题:QDialog使用的所有默认标志是什么,有没有一种方法可以设置默认值,所以我不必自己传递标记(很容易被忽略)一些对跨平台能力很重要的事情)时间我初始化一个新的QDialog

1 个答案:

答案 0 :(得分:3)

你可以这样做:

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;

现在,每当您创建一个Dialog时,您都可以将defaultFlags作为第二个参数传递。


或者你可以在QDialog类周围编写一个包装器,然后根据自己的喜好进行完全修改并使用它而无需添加额外的参数或重复自己:

class CustomDialog : public QDialog
{
    Q_OBJECT

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

};