crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> QHeaderView Как узнать ширину ВСЕЙ области заголовка ?
flankerr
  опции профиля:
сообщение 17.9.2009, 18:32
Сообщение #11


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


SABROG, а можно более подробно ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 17.9.2009, 20:54
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(flankerr @ 17.9.2009, 19:32) *
SABROG, а можно более подробно ?


Предыстория такова. Обычно для инициализации некоторых данных используется конструктор виджета, в то время как сам виджет еще не показывается на экране, он еще не создан, у него нет каких-то валидных размеров, валидных координат, еще не сработали компановщики, которые меняют как положение виджета, так и его размер. Поэтому нам необходимо выполнить некоторый метод уже после того, как виджет выполнит все действия по инициализации и будет готов к работе с пользователем. Обычно возвращение в цикл событий или запуск цикла событий говорит о том, что всё готово к работе и можно всё потрогать. Поэтому у нас только один вариант - дождаться цикла событий и выполнить нужный нам метод. Сделать это можно - поставив в очередь выполнение слота. Варианта 2: QTimer::singleShot() или QMetaObject::invokeMethod() с параметром Qt::QueuedConnection.

Не знаю почему, но тролли предпочитают именно QMetaObject::invokeMethod() в таких приложениях как:
/examples/dbus/pingpong
/examples/dbus/remotecontrolledcar
/examples/network/torrent
/examples/xmlpatterns
/demos/browser
/demos/sqlbrowser
/tools/assistant
/tools/designer
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 18.9.2009, 10:49
Сообщение #13


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


Предположим пришло событие изменения размера - виджет запускает пересчёт параметров - когда пересчёт закончен то возращемся в цикл обрабоки сообщений - теперь все параметры инициазированы новыми значениями и их можно использовать.

Вот это вроде понятно. Но не совсем ясно что делает QMetaObject::invokeMethod()

Если я правильно понял, то я вылавливаю событие изменения размера в нём делаю вызов QMetaObject::invokeMethod() в котором указываю какой надо вызвать метод при возврате в цикл обработки ???
Если так тогда QMetaObject::invokeMethod() аналогичен вызову emit MySignal; ведь сигнал обаботается как раз когда мы вернёмся в цикл обработки.
Или я что-то не понял ???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.9.2009, 11:02
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(flankerr @ 18.9.2009, 14:49) *
в котором указываю какой надо вызвать метод при возврате в цикл обработки ???
угу

Цитата(flankerr @ 18.9.2009, 14:49) *
ведь сигнал обаботается как раз когда мы вернёмся в цикл обработки.
только в случае если ты его соеденил со слотом с параметром Qt::QueuedConnection. (сам сигнал не обрабатывается, обрабатывается слот, если он присоеденён к сигналу.)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 18.9.2009, 11:57
Сообщение #15


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


Попробывал - работает.

Но всё таки в чём QMetaObject::invokeMethod(Qt::QueuedConnection) отличается от emit MySignal не совесм понял.
Ну могу предположить что слот чеерз QMetaObject::invokeMethod будет вызван раньше чем слот вызванный через emit MySignal ???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.9.2009, 12:31
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(flankerr @ 18.9.2009, 15:57) *
Но всё таки в чём QMetaObject::invokeMethod(Qt::QueuedConnection) отличается от emit MySignal не совесм понял.
соединение с сигналом может быть осуществленно не тобой, в общем случае, а другим програмистом. И он может упустить из виду, что необходимо использовать Qt::QueuedConnection - потенциальная проблема. invokeMethod ты вызываешь непосредственно в этом методе, тем самым скрывая тонкости реализации.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 18.9.2009, 13:14
Сообщение #17


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


Litkevich Yuriy, но в сущности и emit MySignal и invokeMethod добавляют эвент в конец очереди сообщений так ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.9.2009, 13:42
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(flankerr @ 18.9.2009, 17:14) *
добавляют эвент в конец очереди сообщений так ?
нет.

Цитата(flankerr @ 18.9.2009, 17:14) *
emit MySignal
вообще по большому счёту ничего не значит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 21.9.2009, 13:39
Сообщение #19


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


Litkevich Yuriy, Значит invokeMethod делает вызов слота перед тем как начнёться обрабатываться очередь ?
Не понял "вообще по большому счёту ничего не значит" что тут имелось ввиду ???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.9.2009, 13:55
Сообщение #20


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(flankerr @ 21.9.2009, 17:39) *
Значит invokeMethod делает вызов слота перед тем как начнёться обрабатываться очередь ?
QMetaObject::invokeMethod(Qt::QueuedConnection) - поставит в очередь

Цитата(flankerr @ 21.9.2009, 17:39) *
Не понял "вообще по большому счёту ничего не значит" что тут имелось ввиду ???
emit mySignal - по большому счёту ничего не значит, т.к. если где-то в программе этот сигнал не соединён со слотом, то ничего не произойдёт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.12.2024, 22:05