Pergunta

Eu tenho um aplicativo de diálogo Qt. Agora eu não quero que o diálogo a ser redimensionado. Não estou certo de como conseguir isso. Eu tentei um monte de coisas, mas ainda quando os lançamentos de diálogo este diálogo pode ser redimensionada.

O que é a propriedade que devo definir para desativar a caixa de diálogo / Widget de redimensionamento.

Eu também tentei

setSizePolicy(QSizePolicy::Fixed);

Mas eu recebo um erro dizendo ..

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'

Por favor me ajudar com isso.

Foi útil?

Solução

Eu não sei se você já tentou fazê-lo, mas QWidget::setFixedSize deve fazer o que quiser

Outras dicas

O erro de compilação que você recebe é porque você tentar passar um QSizePolicy::Policy para setSizePolicy(QSizePolicy), mas não há nenhuma conversão implícita de QSizePolicy::Policy (que é a política de uma dimensão) para QSizePolicy (que é contendo uma classe, entre outras coisas, um Policy por dimensão (largura, altura)). QSizePolicy não funciona em widgets de nível superior (janelas) de qualquer maneira, apesar de tudo.

setFixedSize() só funciona se você sabe o tamanho da caixa de diálogo com antecedência (e normalmente não fazer, o que com a mudança dos tamanhos de fonte e idiomas). Você pode fazer

window()->setFixedSize( window()->sizeHint() );

mas é muito melhor para uso

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

Isso permite que o layout determinar o tamanho da caixa de diálogo, mas não permite redimensionar, que eu suponho que é o que você estava pedindo.

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

Você precisa mudar as windowFlags do diálogo e defina-o Qt :: MSWindowsFixedSizeDialogHint.

Isso só funciona no Windows .

Para mais informações, por favor veja este exemplo: http://doc.qt.digia.com/4.5/widgets-windowflags. html

Se você usar QtCreator (claro que você é) você pode definir o HorizontalsizePolicy propriedade para Política Vertical fixa e também para fixo. Em seguida, você pode definir o MaximumSize com as dimensões desejadas. A janela não irá maximizar novamente.

Em QT Creator, no editor UI, clique no objeto superior na janela de propriedades, em seguida, vá na parte inferior na parte Layout. Você deverá ver a propriedade layoutSizeConstraint.

Defina a layoutSizeConstraint para SetFixedSize.

No código que você pode fazer algo como isso,

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

Em QtCreator faça o seguinte,

  1. Selecione a caixa de diálogo Widget
  2. Localize o widget caixa de diálogo na janela de objeto
  3. Na janela Object, clique direito sobre o objeto caixa de diálogo para aparecer um menu
  4. Selecione "Tamanho restrições" -> "Tamanho Set Maximum" a partir do menu
  5. clique com o botão direito novamente no objeto de diálogo para aparecer um menu
  6. Selecione "Tamanho restrições" -> "Set Minimum Size"
  7. Na janela de propriedades,
    • garantir "sizePolicy" -> "Política Horizontal" tem valor "fixo"
    • garantir "sizePolicy" -> "Política Vertical" tem valor "fixo"
    • garantir "sizeGripEnabled" não está marcada

A partir da documentação Qt, método setSizePolicy() quer leva zero, argumento ou dois argumentos, mas não pode ser um argumento. É por isso que você receber esse erro de compilação. Da minha experiência, se você não definir o tamanho fixo. Este método não tem nenhum uso. A janela pode ainda ser redimensionável.

No caso de você está projetando UI em QML e lançar usando QDeclarativeView, tente o código abaixo.

QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
.
.
.
//To make the window non-resizable
viewer->setFixedSize(viewer->width(),viewer->height());

Aqui QmlApplicationViewer é derivado de QDeclarativeView.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top