Russian Qt Forum
Октябрь 04, 2024, 02:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: PyQt4: Как сделать окно всегда активным?  (Прочитано 8741 раз)
linkerboker
Гость
« : Август 11, 2009, 09:45 »

Для примера отлично подходит QMessageBox. Когда появляется окошко QMessageBox с сообщением, остальные окна приложения блокируются и становятся некликабельными. Мне же нужно чтобы роль QMessageBox'а исполняла целая форма с кучей контролов (назовем ее, к примеру, login_form). Т.е. при появлении этой login_form другая форма (main_form) должна блокироваться и возвращать полученный фокус к login_form.

Я перепробовал довольно много вариантов. Все, до чего пока дошел:
Код:
# в объявлении класса login_form
def focusOutEvent(self, event):
    self.activateWindow()

Это замечательно работает если фокус до его потери был на самом фоновом QWidget'е. Однако на login_form лежат еще и два QLineEdit'а (ln_email и ln_password). Как обработать потерю фокуса этими едитами так, чтобы он возвращался на login_form? При этом потерянный фокус может перейти и на другой контрол на этой же форме login_form (при этом, конечно, никакой фокус возвращать не надо). Интерфейс создавался в Qt Creator'e и переведен в питоновский модуль командой pyuic4 login_form.ui > login_form.py. Итого, сейчас я имею:
Код:
def focusOutEvent_form:
    login_form.activateWindow()

def focusOutEvent_control:
    if application.activeWindow() == login_form().window():
        return
    focusOutEvent_form:

class LoginForm(QtGui.QMainWindow):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_LoginForm()
        self.ui.setupUi(self)
        self.focusOutEvent = focusOutEvent_form
        self.ui.ln_edit.focusOutEvent = focusOutEvent_control
        self.ui.ln_password.focusOutEvent = focusOutEvent_control

Все это работает только если передать фокус другой форме. При передаче же фокуса другому контролу на этой же login_form начинаются непонятные глюки: фокус имеют сразу 2(!) QLineEdit'а. Да и выглядит как-то убого... вроде. Кто-нибудь знает прямой и понятный способ решить мою проблемку? Чувствую что легко и я не прав, но понятия не имею как.
Записан
LestorN
Гость
« Ответ #1 : Август 11, 2009, 10:01 »

QDialog?
Записан
linkerboker
Гость
« Ответ #2 : Август 11, 2009, 10:08 »

LestorN:
Хм, почитал доки на trolltech... Да, мне нужно поведение modal QDialog'a. А на QDialog можно ложить контролы? А их у меня многовато для login_form для описания прямо в коде... Можно ли создавать QDialog'и в Qt Creator?
Записан
spectre71
Гость
« Ответ #3 : Август 11, 2009, 10:19 »

LestorN:
Можно ли создавать QDialog'и в Qt Creator?
Да
Записан
linkerboker
Гость
« Ответ #4 : Август 11, 2009, 10:21 »

Отлично, все остальное неважно, всем спасибо.
Записан
linkerboker
Гость
« Ответ #5 : Август 11, 2009, 10:46 »

LestorN:
Можно ли создавать QDialog'и в Qt Creator?
Да
Черт! Просто не замечал другие пункты, кроме "Widget"  в меню "New"! А решение было под носом...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 21.