windows - Deaktiver QSizeGrip for QMainWindow

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har forsøgt at deaktivere størrelsesgrebet efter at have indstillet den faste bredde af hovedvinduet. Jeg læste i Qt-formularerne, at indstillingen statusBar()->setSizeGripEnabled() som false ville deaktivere resize-grebet, men ikke held. Jeg kører dette på Qt5.


Jeg ved, at fjernelse af rammen ville fjerne dette problem, men det er et større problem (skaber måder at trække vinduet, tilføjer knapper til at lukke osv.). Hidtil har jeg det i min main metode:


#if defined(Q\_OS\_WIN)
   QCoreApplication::setAttribute(Qt::AA\_EnableHighDpiScaling);
#endif
QApplication a(argc, argv);
Compressor w;
w.statusBar()->setSizeGripEnabled( false );
w.setFixedSize(QSize(360,450));
w.setGeometry(
            QStyle::alignedRect(
                Qt::LeftToRight,
                Qt::AlignCenter,
                w.size(),
                a.desktop()->availableGeometry()
                )
            );
w.show();


setGeometry indstiller vinduet i midten af ​​skærmen ved opstart, Fastgør det til en størrelse. Jeg er ikke sikker på, hvad problemet er. Er der nogen måde at løse dette på?


Opdater


Indstilling af w.setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); Fungerede ikke. Forsøgt at fastsætte begge til Fixed, ikke held.


Opdater 2


Jeg fjerner endog statuslinjen, men stadig ikke held og lykke.


Opdater 3


Eksempel:


Indtast billedbeskrivelse her [14]


På Windows 10 bruger version Qt 5.10.1

Bedste reference


Windows synes at være en smule adamant om at være den platforme venlige OS. Måden at løse problemet på er at tilføje et vinduesflag. Koden:


går ind i din main.cpp:


// Disable resize arrow.
#if defined(Q\_OS\_WIN)
    w.setWindowFlags(w.windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
#endif


Komplet kode:


#if defined(Q\_OS\_WIN)
   QCoreApplication::setAttribute(Qt::AA\_EnableHighDpiScaling);
#endif
QApplication a(argc, argv);
Compressor w;

// Disable resize arrow.
#if defined(Q\_OS\_WIN)
    w.setWindowFlags(w.windowFlags() | Qt::MSWindowsFixedSizeDialogHint);
#endif

w.setFixedSize(QSize(360,450));
w.setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
w.setGeometry(
            QStyle::alignedRect(
                Qt::LeftToRight,
                Qt::AlignCenter,
                w.size(),
                a.desktop()->availableGeometry()
                )
            );
w.show();


eller


Du kan også tilføje det til din MainWindow.cpp fil som:


this->setWindowFlags(this->windowFlags() | Qt::MSWindowsFixedSizeDialogHint);


Se http://doc.qt.io/qt-5/qt.html#WindowType-enum for mere. [15]