Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как связать самодельный код с полученным кодом после QTDesigner? [RSS Feed]

#1 Авг. 28, 2011 18:08:53

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

mks
Спасибо. :) С вашим вариантом разобрался, а вот свой сделать рабочим так и не получилось. Пойду читать книгу, ссылку на которую дал Rodegast, видать прочтения нескольких статей в совокупности с моим умом недостаточно для понимания Qt. '(



Офлайн

#2 Авг. 28, 2011 21:06:30

Nik
От:
Зарегистрирован: 2010-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Garry87
А не подскажите, существует какая-нибудь IDE с автодополнением кода QT
Eclipse + PyDev



Офлайн

#3 Сен. 2, 2011 20:36:39

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Подскажите, как сделать так, чтобы выставив время в timeEdit и щелкая по pushButton это значение передавалось в label? И вообще, как пользоваться http://doc.qt.nokia.com/4.7/qtgui.html ? Как узнать что сигнал одного компонента можно связать со слотом другого? Там ни одного примера нет вида connect(<Объект1>, <Сигнал>, <Объект2>, <Слот>), ну или аналогичного.



Офлайн

#4 Сен. 2, 2011 20:41:59

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Garry87
…Как узнать что сигнал одного компонента можно связать со слотом другого?…
http://doc.qt.nokia.com/4.7/signalsandslots.html
То же самое на русском - http://doc.crossplatform.ru/qt/4.7.x/signalsandslots.html



Офлайн

#5 Сен. 3, 2011 14:32:18

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

mks
Спасибо, но в общих чертах я этот механизм понял. Но как дело доходит до конкретики- у меня все стопорится. Например чтобы выставив время в timeEdit и щелкая по pushButton это значение передавалось в label делаю так:

from PyQt4 import QtCore, QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(422, 300)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.timeEdit = QtGui.QTimeEdit(self.centralwidget)
self.timeEdit.setGeometry(QtCore.QRect(40, 40, 118, 27))
self.timeEdit.setObjectName(_fromUtf8("timeEdit"))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(180, 40, 67, 17))
self.label.setObjectName(_fromUtf8("label"))
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(130, 100, 97, 27))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 422, 25))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

self.pushButton.clicked.connect(self.slotPushButtonPress)

def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8))

def slotPushButtonPress(self):
self.label.setText(self.timeEdit.timeChanged())


if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Не работает, конечно. Не могу понять, как можно узнать что один сигнал подходит к другому слоту?



Офлайн

#6 Сен. 3, 2011 15:50:30

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Вы похоже стремитесь вставлять сигнал-слотовые соединения где надо и не надо, у классов Qt кроме сигналов и слотов есть простые открытые методы, вызывая которые можно получать либо изменять внутреннее состояние объекта (например у QDateTimeEdit их намного больше чем сигналов и слотов). Если вы хотите по нажатию кнопки что то делать то в слоте нажатия кнопки с помощью открытых функций получайте текущую дату, потом вставляйте её label. Вы пытаетесь с помощью сигнала получить значение, для этого его надо соединить со слотом а не просто вызывать как у вас.
Посмотрите разницу:

void dateChanged (const QDate & date)
QDate date () const
Первая функция ничего не возвращает, а вторая возвращает объект QDate. К тому же как сообщает сам интерпретатор при нажатии кнопки - native Qt signals is not callable. Внутрености реализации Qt сигналов я не знаю, это пусть гуру разъяснят. Всё, выдал всё что знаю :)



Офлайн

#7 Сен. 4, 2011 17:16:26

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

mks
Во-первых большое человеческое спасибо, за то что пытаетесь донести до бестолкового меня свет истины. :)

Во-вторых методы == Public Functions?

В-третьих как правильно понимать запись вида

void dateChanged (const QDate & date)
Видимо, сначала идет тип возвращаемого значения, потом название метода, а что указывается в скобках? И не могли бы Вы коротенько объяснить какой синтаксис используется при вызове методов?



Офлайн

#8 Сен. 4, 2011 19:37:21

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Garry87
Во-вторых методы == Public Functions?
В первом приближении да. Дело в том что библиотека Qt написана на С++, pyqt это просто обёртки для python над С++ функциями и классами.
void dateChanged (const QDate & date)
Это запись прототипа функции на языке С++.
Garry87
Видимо, сначала идет тип возвращаемого значения, потом название метода, а что указывается в скобках? И не могли бы Вы коротенько объяснить какой синтаксис используется при вызове методов?
Да, сначала тип возвращаемого значения, а в скобках типы и количество принимаемых аргументов, в данном случае передача константной ссылкой. Если это не знакомо, изучите азы языка С++.



Офлайн

#9 Сен. 5, 2011 18:25:01

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

mks
Эхх… А напрямую значит с помощью механизма сигналов и слотов не все можно соеденить? Например я без особых проблем смог соеденить slider и spinbox, но соеденить timeEdit и lineedit таким способом видимо нельзя..?

from PyQt4 import Qt
import sys
if __name__ == "__main__" :
app = Qt.QApplication(sys.argv)

window = Qt.QWidget()
window.setWindowTitle("Enter a number")

layout = Qt.QHBoxLayout()
window.setLayout(layout)

slider = Qt.QSlider(Qt.Qt.Horizontal)
slider.setRange(0, 100)
layout.addWidget(slider)

spinbox = Qt.QSpinBox()
spinbox.setRange(0, 100)
layout.addWidget(spinbox)

timeEdit = Qt.QTimeEdit()
layout.addWidget(timeEdit)

label = Qt.QLabel()
layout.addWidget(label)

lineedit = Qt.QLineEdit()
layout.addWidget(lineedit)

Qt.QObject.connect(slider, Qt.SIGNAL("valueChanged(int)"), spinbox.setValue)
Qt.QObject.connect(spinbox, Qt.SIGNAL("valueChanged(int)"), slider.setValue)
Qt.QObject.connect(timeEdit, Qt.SIGNAL("timeChanged(int)"), label.setText)

slider.setValue(25)

window.show()

app.exec_()



Офлайн

#10 Сен. 5, 2011 21:14:20

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Да можно, главное чтобы сигнал и слот совпадали по параметрам. Если требуемого сигнала или слота нет, то можно наследоваться и создавать нужный сигнал/слот в потомке.



Офлайн

  • Начало
  • » GUI
  • » Как связать самодельный код с полученным кодом после QTDesigner?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version