1

hereで説明されているように、Qtダイアログから「?」ボタンを削除したいのですが、どういうわけかうまくいきません。

これは私のコードです:

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

ビット単位の演算子に何か問題があると思いますが、何がわかりません..

4

1 に答える 1

3

これは私にとってはうまくいきます:

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

ただし、最も一般的な方法は、コンストラクターでフラグを渡すことです。

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

編集: QFlags 演算子について誤解があると思います (以下のコメントを参照)。この例はそれをクリアするかもしれません:

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

最後から 2 番目のコード行がQt::WindowContextHelpButtonHintから削除されflagsます。「ネガティブ」フラグは追加されません。

少なくともそれは私の理解です。

于 2012-11-04T20:48:10.227 に答える