tab style sheet c++ qt user-interface border arrow

c++ - tab - qt5 style sheet



En Qt C++, ¿cómo puedo deshabilitar completamente el cambio de tamaño de una ventana, incluido el icono de cambio de tamaño cuando el mouse pasa el borde? (12)

Utilicé: setFixedSize(size()); para detener el cambio de tamaño de la ventana, pero las flechas de cambio de tamaño siguen apareciendo cuando el mouse está sobre el borde de la ventana.

¿Hay una mejor manera de desactivar el cambio de tamaño de la ventana para evitar mostrar las flechas al cruzar el borde?


Acabo de encontrar la respuesta. En Qt Designer, simplemente configure sizeGripEnabled en false debajo de la barra de estado de su ventana. Fácil


Descubrí que llamar a setSizeConstraint (QLayout :: SetFixedSize) en el diseño me funcionaba mejor. Específicamente, desde un constructor de QMainWindow, llamé:

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

Aquí hay un enlace a los documentos: http://doc.qt.io/qt-4.8/qlayout.html#SizeConstraint-enum

(Estoy usando Qt 4.8)

Dado que esta era también una manera simple de resolver la pregunta del OP, pensé que lo compartiría para que otros lo consideraran. Parece que hay muchas maneras de lograr esto en Qt, pero no todas pueden ser ideales para cada situación. Probé varias de las otras opciones publicadas aquí, pero tenían varios problemas o limitaciones con los que no estaba contento en mi propia situación.


Esto me ayudó con Qt Creator 3.1.1:

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


One-liner si sabes exactamente qué tamaño debe tener la ventana:

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


Pruebe algo como esto:

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

Si esto no funciona, todo lo que necesita hacer es detectar qué widget está activando QSizeGrip . Para ello, instale un filtro de eventos en su aplicación e intente capturar el MouseMoveEvent de QSizeGrip. Luego depure su widget padre.

Aquí hay un ejemplo de la función eventFilter que puede usar:

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; }

Probablemente también puedas ver su espectáculo, depende de ti.


Puedes usar el siguiente código en Qt5

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

Donde sz es el objeto QSize.


Qt tiene un windowFlag llamado Qt::MSWindowsFixedSizeDialogHint para eso. Dependiendo de lo que exactamente desee, desea combinar esta bandera con Qt::Widget , Qt::Window o Qt::Dialog .

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


Si desea obtener los valores de ancho y alto del formulario de la interfaz de usuario sin especificar manualmente, puede agregar el siguiente comando dentro de su clase de proyecto:

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

También puede establecer parámetros separados para ancho y alto (si es necesario) con:

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


Si usa Qt Creator , puede intentar especificar el mismo Width y Height de la ventana en las properties de geometry , minimumSize y maximumSize .


Si usa Qt Designer, establezca las propiedades "sizePolicy" de su ventana en "Fijo" en las direcciones vertical y horizontal, y establezca las dimensiones mínima y máxima en valores iguales. A continuación, haga clic con el botón derecho en la ventana y seleccione "Eliminar barra de estado" para eliminar el "control de tamaño" en la esquina inferior derecha. O bien, quite solo el tamaño de agarre a través de la sugerencia de francis (en lugar de la barra de estado completa).


También puedes hacer algo como:

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

Las flechas también se han ido.


Utilizar

setMinimumSize (QSize (width_px, height_px))

setMaximumSize (QSize (width_px, height_px))

donde ambos métodos tienen el mismo tamaño. No verá el cursor de cambio de tamaño y, por lo tanto, la ventana no se redimensionará / maximizará.