【问题标题】:Remove "?"-button from Qt dialog [duplicate]从Qt对话框中删除“?”按钮[重复]
【发布时间】:2012-10-24 17:01:12
【问题描述】:

我想从 Qt 对话框中删除“?”按钮,如 here 解释的那样,但不知何故它不起作用。

这是我的代码:

Qt::WindowFlags flags;
flags = (Qt::Dialog | Qt::WindowStaysOnTopHint) & 
          ~Qt::WindowContextHelpButtonHint;
setWindowFlags( flags );

我认为位运算符有问题,但我不知道是什么..

【问题讨论】:

标签: c++ qt


【解决方案1】:

这对我来说很好用:

QDialog *dialog = new QDialog;
Qt::WindowFlags flags(Qt::WindowTitleHint);
dialog->setWindowFlags(flags);

然而,最常见的方法是在构造函数中传递标志:

QDialog *dialog = new QDialog(0, Qt::WindowTitleHint);

编辑:我认为对 QFlags 运算符存在误解(请参阅下面的 cmets)。这个例子可能会澄清它:

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

倒数第二行代码从flags 中删除Qt::WindowContextHelpButtonHint。它确实添加了“否定”标志。

至少这是我的理解。

【讨论】:

  • 这确实有效,尽管我不太明白为什么。在doc.qt.nokia.com/4.7/qt.html#WindowType-enum 上显示Gives the window a title bar. 代表WindowTitleHint
  • @Zulakis 这是因为默认启用了标志。当您调用 setFlags 时,您将所有当前启用的标志(在您的情况下为默认标志)替换为您放入参数中的标志。因此,当您调用 setFlags(Qt::WindowTitleHint) 时,除 WindowTitleHint 之外的所有其他标志(包括显示问号的标志)都会被清除。
  • 我不熟悉你使用的语法,所以我不知道它是否应该工作。看起来你想说你想要 X 和 Y,而不是 Z。如果是这样,你就不需要说最后一部分了。
  • 是的,没错。我想要Qt::DialogQt::WindowStaysOnTopHint,但不是Qt::WindowContextHelpButtonHint。但是,无论Qt::WindowContextHelpButtonHint 部分是否存在,“?”按钮始终存在。
  • 我认为这是因为Qt::Dialog 提示显示了问号。
猜你喜欢
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 2010-09-10
相关资源
最近更新 更多