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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Скриптовый динамический ГУИ билдер. Есть такой?  (Прочитано 16041 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #15 : Январь 11, 2012, 18:00 »

есть метод sender() - он возвращает объект, который спровоцировал вызов слота. в твоём случае будет возвращать кнопку.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
popper
Гость
« Ответ #16 : Январь 11, 2012, 19:32 »

А еще есть QSignalMapper
Записан
thechicho
Гость
« Ответ #17 : Январь 11, 2012, 21:05 »

объясни, зачем тебе узнавать какая кнопка вызывает слот и покажи как у тебя ща коннект сделан и какие данные тебе нужны
Записан
iroln
Гость
« Ответ #18 : Январь 11, 2012, 23:27 »

http://qt.osdn.org.ua/signalmapper.html
Записан
spirits25
Гость
« Ответ #19 : Январь 12, 2012, 15:58 »

Спасибо всем, сделал так

Код:
class ButtonMap (QtGui.QPushButton):
    name = ""
    def __init__ (self, name, parent=None):
        self.name = name
        super(ButtonMap, self).__init__(s, parent)
        self.clicked.connect(self.buttonclick)
       
    but_click = QtCore.Signal(str)
    def buttonclick(self):
        self.but_click.emit(self.name)
ниже
Код:
        for num in range (0, len(results)):
            Button = ButtonMap(button_text)
            Button.but_click.connect(self.onActivated)
           
            self.button_list.append(Button)
            self.layout.addWidget(self.button_list[num])
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #20 : Январь 12, 2012, 16:49 »

и ради этого надо было создавать новый класс?.. через sender() это делается без всяких новых классов - просто приводишь его к типу кнопки с помощью qobject_cast и считываешь её текст.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
spirits25
Гость
« Ответ #21 : Январь 13, 2012, 10:03 »

и ради этого надо было создавать новый класс?.. через sender() это делается без всяких новых классов - просто приводишь его к типу кнопки с помощью qobject_cast и считываешь её текст.
Действительно проще, только немного не так, я ведь про PySide
Код:
    def onActivated(self):
        method_name = self.sender().text()
и всё=)
Записан
iroln
Гость
« Ответ #22 : Январь 13, 2012, 10:09 »

Лучше использовать QSignalMapper - это с точки зрения ОО проектирования правильнее и красивее.
Тут всё по-русски написано http://qt.osdn.org.ua/signalmapper.html Улыбающийся
Записан
spirits25
Гость
« Ответ #23 : Январь 13, 2012, 10:28 »

ещё вопрос, как приконнектиться к сигналу изменения размеров QtGui.QMainWindow?
Записан
iroln
Гость
« Ответ #24 : Январь 13, 2012, 10:33 »

за это отвечает событие resizeEvent

В классе виджета надо определить метод resizeEvent и в нём обрабатывать событие измерения размеров окна.

Код
Python
class Window(QtGui.QMainWindow):
   def resizeEvent(self, event):
       # Тут что-то делаем при изменении размеров окна
 
Записан
spirits25
Гость
« Ответ #25 : Январь 16, 2012, 15:48 »

за это отвечает событие resizeEvent

В классе виджета надо определить метод resizeEvent и в нём обрабатывать событие измерения размеров окна.

Код
Python
class Window(QtGui.QMainWindow):
   def resizeEvent(self, event):
       # Тут что-то делаем при изменении размеров окна
 
спасибо, это просто запамятовал=)
А вот в другом встал.
Необходимо по нажатии кнопки выполнять большую функцию (точнее метод), которая изменяет gui, но беда в том, что пока всё действие кнопки не закончится, gui не меняется, а в самом конце выдаётся последний результат.

Что тут посоветуете? пробывал QThread (вылетает, пишет что поток из другого потока не сделать)
Код:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is Oxygen::ScrollBarEngine(0x2444c70), parent's thread is QThread(0x157bc50), current thread is MyThread(0x31b7a80)
QObject::setParent: Cannot set parent, new parent is in a different thread
QObject::setParent: Cannot set parent, new parent is in a different thread
Ошибка сегментирования
и пробовал emit. Не помогло.
Записан
popper
Гость
« Ответ #26 : Январь 16, 2012, 16:05 »

Попробуй QCoreApplication::flush ()
Записан
spirits25
Гость
« Ответ #27 : Январь 16, 2012, 16:22 »

Попробуй QCoreApplication::flush ()
Спасибо, попробовал - не помогло...
Код:
        QtCore.QCoreApplication.flush()
        self.ClientObj.app.flush()
и отдельно и как метод моего Application, никак не помогло.

QtGui.QApplication.flush() - тоже нет.
Сначала всё выполняется, потом обновляется виджет.
« Последнее редактирование: Январь 16, 2012, 16:24 от spirits25 » Записан
iroln
Гость
« Ответ #28 : Январь 16, 2012, 23:32 »

А QApplication::processEvents?
Надо вызывать в той функции, которая что-то долго делает, но там должен быть цикл, иначе смысла нет.
Записан
spirits25
Гость
« Ответ #29 : Январь 17, 2012, 08:47 »

А QApplication::processEvents?
Надо вызывать в той функции, которая что-то долго делает, но там должен быть цикл, иначе смысла нет.
Спасибо, помогло.
Если кому надо, вот нашёл про QApplication::processEvents http://www.opennet.ru/docs/RUS/qt3_prog/x4064.html там qt3, но разницы не вижу=)
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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