【问题标题】:QDialog - Change default flags to exclude ? buttonQDialog - 更改默认标志以排除?按钮
【发布时间】:2015-06-18 00:17:02
【问题描述】:

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

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

不过,我也在我的程序中使用了其他对话框,例如QMessageBoxQInputDialog

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

【问题讨论】:

    标签: c++ qt qdialog


    【解决方案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);
    
    };
    

    【讨论】:

    • 我明白了。更改默认值怎么样,这样我就不必为我调用的每个其他实例键入/复制粘贴否定操作?
    • 这个想法从我脑海中掠过。我希望有一些东西可以真正更新默认值,但这可能是不可能的(不知道 Qt 是否有方法来公开它)。如果您可以确认没有公开这种方法,或者如果 24 小时内没有出现更好的答案,我会将其标记为答案。
    • @Assimilater 我怀疑至少我不知道怎么做,但不同的解决方案是只在 QDialog 周围编写一个包装器,您可以根据自己的喜好进行完全修改。至少我会这样做
    • @Assimilater 你不能在不修改源代码的情况下更改默认值。您最好的选择是使用帮助函数来创建您设置所需标志的对话框。
    • @Assimilater 你也可以创建一个包装器来包装 QInputDialog + QLineEdit in
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2013-12-24
    相关资源
    最近更新 更多