Non ridimensionabili QDialog con dimensione fissa in Qt?
Domanda
Ho un Qt finestra di applicazione.Ora io non voglio che la finestra di dialogo per essere ridimensionabili.Io non sono sicuro di come ottenere questo risultato.Ho provato un sacco di cose, ma ancora quando la finestra di dialogo avvia questa finestra può essere ridimensionata.
Che cosa è la proprietà che dovrei impostare per disattivare la finestra di dialogo/Widget di ridimensionare.
Ho provato anche
setSizePolicy(QSizePolicy::Fixed);
Ma mi da un errore dicendo..
source\nimcac_settingsMain.cpp(36) : error C2248: **'QSizePolicy::QSizePolicy' : cannot access private member declared in class 'QSizePolicy'** p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\ kernel\qsizepolicy.h(177) : see declaration of 'QSizePolicy::QSizePolicy' p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\ kernel\qsizepolicy.h(34) : see declaration of 'QSizePolicy'
Gentilmente darmi una mano con questo.
Soluzione
Non so se avete già provato, ma QWidget::setFixedSize
dovrei fare quello che vuoi
Altri suggerimenti
L'errore di compilazione si ottiene è perché si tenta di passare un QSizePolicy::Policy
a setSizePolicy(QSizePolicy)
, ma non c'è conversione implicita da QSizePolicy::Policy
(che è la politica per una dimensione) a QSizePolicy
(che è una classe che contiene, tra le altre cose, uno Policy
per dimensione (altezza, larghezza)). QSizePolicy
non funziona sui widget di primo livello (finestre) in ogni caso, però.
setFixedSize()
funziona solo se si conosce la dimensione della finestra di dialogo in anticipo (e di solito non lo fai, quello che con mutevoli dimensioni dei caratteri e lingue). Si può fare
window()->setFixedSize( window()->sizeHint() );
, ma è molto meglio usare
window->layout()->setSizeConstraint( QLayout::SetFixedSize );
che lascia il layout di determinare le dimensioni della finestra di dialogo, ma non consente il ridimensionamento, che presumo è quello che stavi chiedendo.
this->setFixedSize(this->width(),this->height());
È necessario modificare le windowFlags della finestra e impostarlo su Qt :: MSWindowsFixedSizeDialogHint.
Questo funziona solo in Windows .
Per ulteriori informazioni si prega di consultare questo esempio: http://doc.qt.digia.com/4.5/widgets-windowflags. html
Se si utilizza QtCreator (ovviamente sei) è possibile impostare la proprietà HorizontalsizePolicy alla politica verticale fissa e anche per fisso. Quindi è possibile impostare la MaximumSize per le dimensioni desiderate. La finestra non ci permetterà di ottimizzare di nuovo.
Il Qt Creator, nell'editor di interfaccia utente, fare clic sull'oggetto in alto nella finestra delle proprietà, quindi scorrere in basso nella parte Layout. Si dovrebbe vedere la proprietà layoutSizeConstraint.
Imposta il layoutSizeConstraint
a SetFixedSize
.
Nel codice si può fare qualcosa di simile,
Dialog->resize(581, 292);
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(WaterLevelEditorDialog->sizePolicy().hasHeightForWidth());
Dialog->setSizePolicy(sizePolicy);
Dialog->setMinimumSize(QSize(581, 292));
Dialog->setMaximumSize(QSize(581, 292));
Dialog->setSizeGripEnabled(false);
In QtCreator fare come segue,
- Selezionare la finestra di dialogo widget
- Individuare la finestra di dialogo widget in Oggetto Finestra
- Nella Finestra di Oggetto, fare clic destro sulla finestra di dialogo oggetto di un menu a comparsa
- Selezionare "Dimensione Vincoli" -> "Imposta Dimensione Massima" dal menu
- Fare di nuovo clic destro sulla finestra di dialogo oggetto di un menu a comparsa
- Selezionare "Dimensione Vincoli" -> "Set Minimo"Dimensione
- Nella Finestra Proprietà,
- garantire "sizePolicy"->"Orizzontale Politica" ha il valore "Fisso"
- garantire "sizePolicy"->"Verticale Politica" ha il valore "Fisso"
- garantire "sizeGripEnabled" non è selezionata
Dalla documentazione Qt, metodo setSizePolicy()
sia prende argomento zero o due argomenti, ma non può essere un argomento. Ecco perché si ottiene questo errore di compilazione. Dal mio esperimento, se non si imposta la dimensione fissa. Questo metodo non ha alcun uso. La finestra può essere ancora ridimensionabile.
Nel caso in cui si sta progettando interfaccia utente in QML e lanciando utilizzando QDeclarativeView, provare il codice qui sotto.
QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
.
.
.
//To make the window non-resizable
viewer->setFixedSize(viewer->width(),viewer->height());
Qui QmlApplicationViewer è derivato da QDeclarativeView.