2009-02-22 1 views
3

У меня есть следующий класс:Как я могу избавиться от дескриптора размера в QDialog?

class SelectDateDialog(QDialog): 
    startDate = date.today() 
    endDate = date.today() 

    def __init__(self, text, isInterval = False): 
     QDialog.__init__(self) 
     uic.loadUi("resources/SelectDate.ui", self) 

Теперь диалог изменяемый на Mac OS X 10.5, но это не должно быть. Он имеет ручку изменения размера в нижнем правом углу.

Я уже пробовал функцию setSizeGripEnabled, она ничего не меняла.

Как я могу сделать его не изменяемым?

+0

Почему вы хотите, чтобы предотвратить диалог от того изменяемыми? Я не могу придумать случай, когда фиксированный размер был бы лучше, чем изменчивый, но, возможно, я что-то упустил. –

+0

Это вид диалога, который просто указывает сообщение. Это выглядит лучше и больше похоже на программу Mac OS X. QMessageBox делает все правильно. –

ответ

4

Самый чистый способ сделать окно или диалог неизменяемым - установить ограничение размера его макета на QLayout.SetFixedSize (или QLayout :: SetFixedSize на C++). Вам нужно сделать это только для основного макета в окне - того, который содержит все другие виджеты и макеты.

Я вижу, что вы используете Qt Designer для создания пользовательского интерфейса для вашего диалога. Откройте файл .ui и выберите окно, затем прокрутите вниз в редакторе свойств, пока не увидите раздел «Макет». Установите свойство layoutSizeConstraint в SetFixedSize.

При просмотре формы виджеты внутри диалогового окна должны быть организованы правильно, но вы не сможете изменить размер диалогового окна.

+0

Это то, что я использую. – mxcl

+0

Информация о Qt Designer помогла. Благодаря! –

1

По какой-то причине, я всегда должен был сделать следующее (в Qt Designer), чтобы быть абсолютно уверены, что окно не может быть изменен:

sizePolicy -> Horizontal Policy = Fixed 
sizePolicy -> Vertical Policy = Fixed 

minimumSize -> Width = X 
minimumSize -> Height = Y 

maximumSize -> Width = X 
maximumSize -> Height = Y 

Обратите внимание, что я выбрал X и Y, чтобы показать, что minimumSize == maximumSize. Когда вы это сделаете, ручка изменения размера должна исчезнуть сама по себе, хотя я видел, что хотя бы один дистрибутив Linux оставил дескриптор включенным. В этом конкретном случае мы просто спрятали дескриптор, так как он никак не мог изменить размер окна.

5

Я использую следующий код, чтобы установить размер QDialog:

layout()->setSizeConstraint(QLayout::SetFixedSize) ; 
setSizeGripEnabled(false) ; 

Первая строка обеспечивает соблюдение размера макета, основанный на предпочтительном размере виджетов, содержащихся в компоновке. Вторая линия удаляет фактический захват.

Чтобы отменить это, вы установите ограничение по умолчанию на макет и снова включите захват размера.

8

, если вы хотите без изменяемого QDialog DLG, затем установите

dlg.setWindowFlags(Qt::MSWindowsFixedSizeDialogHint); 
+0

Это работает как шарм, спасибо! –

Смежные вопросы