2014-02-17 6 views
1

Я использую setGeometry(), чтобы установить координату widget. Но когда я удаляю widget и удаляю его из основного макета, он не может правильно установить геометрию. Я использую KeyReleaseEvent(), т. Е. Когда я нажимаю клавишу D, необходимо удалить определенный виджет и установить геометрию в определенную позицию. Когда я нажимаю его в первый раз, эффект не отображается, но виджеты удаляются и когда я нажимаю его во второй раз, он устанавливается правильно.Невозможно установить геометрию в QT

void mywindow::popUpWindow() 
{ 
    if(stack1->currentIndex()==0){ 
     stack3->hide(); 
     mainLayout->addWidget(stack2); 
     stack2->show(); 
     stack2->setFixedSize(400,200); 
     this->setGeometry(100,400,900,200); 
    } 

    if(stack1->currentIndex()==1){ 
     stack2->hide(); 
     mainLayout->addWidget(stack3); 
     stack3->show(); 
     stack3->setFixedSize(400,200); 
     this->setGeometry(100,400,900,200); 
    } 
} 

void mywindow::deleteWindow() 
{ 
    mainLayout->removeWidget(stack2); 
    mainLayout->removeWidget(stack3); 
    stack2->hide(); 
    stack3->hide(); 
    this->setGeometry(100,400,500,200); 

} 

popUpWindow() связан с одним KeyReleasedEvent() и deleteWindow() связан с другим ключом.

Original WIndow

After pressing I Key and calling popWindow()

After pressing D key and calling deleteWindow()After pressing 2nd time D Key and calling deleteWindow for the 2nd time

Fig 1: Original WIndow 
Fig 2: After calling popUpWindow() by pressing key I 
Fig 3: After calling deleteWindow() by pressing key D for the first time 
Fug 4: After calling again deleteWindow() for 2nd time 

ответ

1

После удаления виджетов, если вы хотите, чтобы все изменить размер хорошо, вы должны вызвать adjustSize().

Также размеры виджета в виде сложного виджета могут влиять на ширину и высоту конца вашего окна.

Надеюсь, что это поможет.