setFixedSize(size());
を使用してウィンドウのサイズ変更を停止しましたが、マウスがウィンドウの境界線上にあるときにサイズ変更矢印が表示されたままです。
ウィンドウのサイズ変更を無効にして、境界を越えるときに矢印が表示されないようにするより良い方法はありますか?
Qtには、そのためのQt::MSWindowsFixedSizeDialogHint
というwindowFlagがあります。必要に応じて、このフラグをQt::Widget
、Qt::Window
、またはQt::Dialog
と組み合わせます。
void MyDialog::MyDialog()
{
setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
...
}
次のようなものを試してください:
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;
}
おそらくそのショーイベントをキャッチすることもできます、それはあなた次第です。
ウィンドウのサイズを正確に把握している場合は1行:
this->setFixedSize(QSize(750, 400));
Qt Designerを使用している場合、ウィンドウの「sizePolicy」プロパティを垂直方向と水平方向で「固定」に設定し、最小寸法と最大寸法を同じ値に設定します。次に、ウィンドウを右クリックし、[ステータスバーの削除]を選択して、右下隅の[サイズグリップ]を削除します。または、(ステータスバー全体ではなく)フランシスからの提案を介してサイズグリップのみを削除します。
レイアウト上で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でこれを達成するには多くの方法があるように見えますが、すべてがすべての状況に理想的であるとは限りません。ここに投稿した他のオプションをいくつか試しましたが、さまざまな問題や制約があり、自分の状況では満足できませんでした。
つかいます
setMinimumSize(QSize(width_px、height_px))
setMaximumSize(QSize(width_px、height_px))
両方のメソッドにsameサイズがあります。サイズ変更カーソルが表示されないため、ウィンドウはサイズ変更されません/最大化。
手動で指定せずにUIフォーム自体から幅と高さの値を取得する場合は、プロジェクトクラス内に次のコマンドを追加できます。
this->setFixedSize(this->width(), this->height());
また、幅と高さのパラメータを個別に設定することもできます(必要な場合)。
this->setFixedWidth(this->width());
this->setFixedHeight(this->height());
Qt5では次のコードを使用できます
this->setMinimumSize(sz);
this->setMaximumSize(sz);
SzはQSizeオブジェクトです。
また、次のようなこともできます。
this->setFixedWidth(int);
this->setFixedHeight(int);
矢印も消えています。
Qt Creator を使用すると、tryで同じWidth
とHeight
を指定できますproperties
of geometry
、minimumSize
、およびmaximumSize
のウィンドウの.
これはQt Creator 3.1.1の助けになりました。
this->setFixedSize(this->maximumSize());
サイズは外観がわかるまでわからないため、システム設定(100%、125%、150%)によって異なる可能性があるため、次のようなことを試してください(サイズ変更カーソルも非表示にします)。
void QWidget::showEvent(QShowEvent *event)
{
// disable vertical resize
int height = this->height();
if (height != minimumHeight() || height != maximumHeight()) {
setMinimumHeight(height);
setMaximumHeight(height);
}
}
ウィンドウのサイズ変更を防ぐには、次の行を追加します。
setFixedSize(width(), height());
qMainWindowコンストラクターのui->setupUi(this);
行の後。
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
誰かが同じを探しているが、Pythonの場合:
MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint)