web-dev-qa-db-ja.com

マウスが境界線をホバーするときに、サイズ変更アイコンを含むウィンドウのサイズ変更を完全に無効にするにはどうすればよいですか?

setFixedSize(size());を使用してウィンドウのサイズ変更を停止しましたが、マウスがウィンドウの境界線上にあるときにサイズ変更矢印が表示されたままです。

ウィンドウのサイズ変更を無効にして、境界を越えるときに矢印が表示されないようにするより良い方法はありますか?

35
Klasik

Qtには、そのためのQt::MSWindowsFixedSizeDialogHintというwindowFlagがあります。必要に応じて、このフラグをQt::WidgetQt::Window、またはQt::Dialogと組み合わせます。

void MyDialog::MyDialog()
{
  setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);

  ...
}
36
dsonck92

次のようなものを試してください:

this->statusBar()->setSizeGripEnabled(false);

これが機能しない場合、必要なのは、どのウィジェットがアクティブになっているかを検出することです QSizeGrip 。これを行うには、アプリにイベントフィルターをインストールし、QSizeGripのmouseMoveEventをキャッチします。次に、その親ウィジェットをデバッグします。

使用できるeventFilter関数の例を次に示します。

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(event->type() == QEvent::MouseMove)
    {
        QSizeGrip *sg = qobject_cast<QSizeGrip*>(obj);
        if(sg)
            qDebug() << sg->parentWidget();
    }
    return false;
}

おそらくそのショーイベントをキャッチすることもできます、それはあなた次第です。

18
thuga

ウィンドウのサイズを正確に把握している場合は1行:

this->setFixedSize(QSize(750, 400));
13

Qt Designerを使用している場合、ウィンドウの「sizePolicy」プロパティを垂直方向と水平方向で「固定」に設定し、最小寸法と最大寸法を同じ値に設定します。次に、ウィンドウを右クリックし、[ステータスバーの削除]を選択して、右下隅の[サイズグリップ]を削除します。または、(ステータスバー全体ではなく)フランシスからの提案を介してサイズグリップのみを削除します。

8
BuvinJ

レイアウト上でsetSizeConstraint(QLayout :: SetFixedSize)を呼び出すのが最適であることがわかりました。具体的には、QMainWindowコンストラクターから、次を呼び出しました。

this->layout()->setSizeConstraint(QLayout::SetFixedSize);

ドキュメントへのリンクは次のとおりです。 http://doc.qt.io/qt-4.8/qlayout.html#SizeConstraint-enum

(私はQt 4.8を使用しています。)

これはOPの質問を解決する簡単な方法でもあったので、他の人が検討するためにそれを共有すると思った。 Qtでこれを達成するには多くの方法があるように見えますが、すべてがすべての状況に理想的であるとは限りません。ここに投稿した他のオプションをいくつか試しましたが、さまざまな問題や制約があり、自分の状況では満足できませんでした。

8
Aaron

つかいます

setMinimumSize(QSize(width_px、height_px))

setMaximumSize(QSize(width_px、height_px))

両方のメソッドにsameサイズがあります。サイズ変更カーソルが表示されないため、ウィンドウはサイズ変更されません/最大化。

4
Tushar

手動で指定せずにUIフォーム自体から幅と高さの値を取得する場合は、プロジェクトクラス内に次のコマンドを追加できます。

this->setFixedSize(this->width(), this->height());

また、幅と高さのパラメータを個別に設定することもできます(必要な場合)。

this->setFixedWidth(this->width());
this->setFixedHeight(this->height());
3
ramsudharsan

Qt5では次のコードを使用できます

this->setMinimumSize(sz);
this->setMaximumSize(sz);

SzはQSizeオブジェクトです。

3
Boris Ivanov

また、次のようなこともできます。

this->setFixedWidth(int);
this->setFixedHeight(int);

矢印も消えています。

3
GorudoYami

Qt Creator を使用すると、tryで同じWidthHeightを指定できますproperties of geometryminimumSize、およびmaximumSizeのウィンドウの.

3
Aleksey Bykov

これはQt Creator 3.1.1の助けになりました。

this->setFixedSize(this->maximumSize());
3
Rachael

サイズは外観がわかるまでわからないため、システム設定(100%、125%、150%)によって異なる可能性があるため、次のようなことを試してください(サイズ変更カーソルも非表示にします)。

void QWidget::showEvent(QShowEvent *event)
{
    // disable vertical resize
    int height = this->height();
    if (height != minimumHeight() || height != maximumHeight()) {
        setMinimumHeight(height);
        setMaximumHeight(height);
    }
}
0
LoneSR

ウィンドウのサイズ変更を防ぐには、次の行を追加します。

setFixedSize(width(), height());

qMainWindowコンストラクターのui->setupUi(this);行の後。

0
Nikos

Windows 10で本当に機能した唯一のソリューションは、WinAPIを使用することです。

#ifdef Q_OS_WIN
    #include <windows.h>

    ...

    SetWindowLong((HWND) window->winId(), GWL_STYLE, GetWindowLong((HWND) window->winId(), GWL_STYLE)&~WS_SIZEBOX);

#endif
0
Œlrim

誰かが同じを探しているが、Pythonの場合:

    MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)
0
Cherry Red