Автономные классы с Qt - PullRequest
       17

Автономные классы с Qt

0 голосов
/ 10 октября 2009

Я пытался сделать свои уроки полностью самодостаточными, но у меня есть некоторые проблемы, которые, вероятно, возникают из-за того, что я пропустил что-то, что все остальные знали в первую очередь ...

В любом случае, возьмите этот пример:

class Main_Window (QtGui.QMainWindow):
    def __init__ (self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_bookingSystemMain()
        self.ui.setupUi(self)

        # Connect slots
        QtCore.QObject.connect(self.ui.submitRecord, QtCore.SIGNAL("clicked()"), self.__clickSubmitRecord)
        QtCore.QObject.connect(self.ui.btnListBookings, QtCore.SIGNAL("clicked()"), self.__show_list)

    def __clickSubmitRecord (self):
        global bookings

        name = self.ui.edtName.text()
        event = str(self.ui.comEvent.currentText())
        amount = self.ui.spinBox.value()

        if name == '':
            QtGui.QMessageBox.warning(self, "Error", "Please enter a name!")
        elif amount == 0:
            QtGui.QMessageBox.warning(self, "Error", "You can't reserve 0 tickets!")
        elif event == '':
            QtGui.QMessageBox.warning(self, "Error", "Please choose an event!")
        else:
            bookings.append(Booking(name, event, amount))
            QtGui.QMessageBox.information(self, "Booking added", "Your booking for " + str(amount) + " ticket(s) to see " + event + " in the name of " + name + " was sucessful.")
            self.__clear_widgets()

    def __clear_widgets (self):
        self.ui.edtName.clear()
        self.ui.comEvent.setCurrentIndex(-1)
        self.ui.spinBox.setValue(0)

    def __show_list (self):
        listdialog = List_Window(self)
        listdialog.show()

Который реализует интерфейс, описанный в другом модуле. Метод clickSubmitRecord () использует глобальный список «резервирования» и добавляет к нему - теперь, конечно, этот класс не должен иметь ничего общего с чем-то кроме этого пользовательского интерфейса?

Как бы я это реализовал? Как я уже сказал, мне, вероятно, не хватает какой-то техники или очевидной конструктивной особенности ...

Спасибо!

1 Ответ

1 голос
/ 10 октября 2009

Я не знаю Python, поэтому не могу привести хороший пример здесь, но то, что я, вероятно, сделал бы с Qt в C ++, это определил сигнал «bookingAdded» для вашего оконного объекта и использовал один из ваших внешних объектов (вероятно, какой бы пользователь ни вызывал пользовательский интерфейс) подключите слот к этому сигналу, а затем в вашем clickSubmitRecord вы сработаете этот сигнал, и новые данные бронирования будут переданы вместе с сигналом на ваш внешний объект.

Тогда вашему объекту пользовательского интерфейса не нужно знать ни о чем внешнем, а все ваши внешние объекты должны знать об этом интерфейсе - это сигнал, который он предоставляет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...