92

アプリケーションの 1 つで Qt ダイアログを使用しています。ヘルプ ボタンを非表示/削除する必要があります。しかし、私は彼のヘルプボタンのハンドルを正確にどこに持っているかを見つけることができません. Qtウィンドウの特定のフラグかどうかはわかりません。

4

9 に答える 9

70
// remove question mark from the title bar
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
于 2015-06-19T09:43:47.120 に答える
69

デフォルトでは、Qt::WindowContextHelpButtonHintフラグがダイアログに追加されます。これは、ダイアログ コンストラクター のWindowFlagsパラメーターで制御できます。

たとえば、次のようにして、TitleHint フラグと SystemMenu フラグのみを指定できます

QDialog *d = new QDialog(0, Qt::WindowSystemMenuHint | Qt::WindowTitleHint);
d->exec();

Qt::WindowContextHelpButtonHintフラグを追加すると、ヘルプ ボタンが元に戻ります。

PyQt では次のことができます。

from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
d = QtGui.QDialog(None, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
d.exec_()

ウィンドウ フラグの詳細については、Qt ドキュメントのWindowType 列挙型を参照してください。

于 2008-09-17T10:44:00.527 に答える
33

わかりました、私はこれを行う方法を見つけました。

ウィンドウフラグを処理します。だからここに私が使用したコードがあります:

Qt::WindowFlags flags = windowFlags()

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   
setWindowFlags(flags);

ただし、これを行うと、ダイアログのアイコンがリセットされることがあります。したがって、ダイアログのアイコンが変更されないようにするために、2行を追加できます。

QIcon icon = windowIcon();

Qt::WindowFlags flags = windowFlags();

Qt::WindowFlags helpFlag =
Qt::WindowContextHelpButtonHint;

flags = flags & (~helpFlag);   

setWindowFlags(flags);

setWindowIcon(icon);
于 2008-09-17T11:53:13.713 に答える
18

Windows 7、Qt 5.2 でこの問題に遭遇しました。私にとって最適なフラグの組み合わせは次のとおりです。

Qt::WindowTitleHint | Qt::WindowCloseButtonHint

これにより、閉じるボタンが機能しますが、疑問符のヘルプボタンは表示されません。Qt::WindowTitleHint または Qt::WindowSystemMenuHint を使用すると、ヘルプ ボタンがなくなりましたが、閉じるボタンも無効になりました。

Michael Bishop が示唆したように、この組み合わせにたどり着いたのは windowflags の例で遊んでいたときでした。ありがとう!

于 2014-02-26T11:07:14.530 に答える
4

ここにリストされている回答は機能しますが、自分で回答するには、サンプル プログラムを実行することをお勧めします$QTDIR/examples/widgets/windowflags。これにより、ウィンドウ フラグとその効果のすべての構成をテストできます。リスのようなウィンドウ フラグの問題を解決するのに非常に役立ちます。

于 2008-12-11T02:15:27.417 に答える
0

スロットが見つかりませんでしたが、仮想winEvent関数をオーバーライドできます。

#if defined(Q_WS_WIN)
bool MyWizard::winEvent(MSG * msg, long * result)
{
    switch (msg->message)
    {
    case WM_NCLBUTTONDOWN:
        if (msg->wParam == HTHELP)
        {

        }
        break;
    default:
        break;
    }
    return QWizard::winEvent(msg, result);
}
#endif
于 2010-09-28T22:12:13.997 に答える