crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Замена объекта
aperon
  опции профиля:
сообщение 13.6.2009, 15:10
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 5.6.2009
Из: Kyiv
Пользователь №: 803

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




Репутация:   0  


Здравствуйте, форумчане. К примеру, в тулбаре имеем несколько объектов, среди которых QSlider. В процессе реботы программы есть необходимость заменить слайдер на другой объект, скжем Phonon::SeekSlider. Подскажите или ткните носом на ответ, как мне такое сделать, чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.6.2009, 15:58
Сообщение #2


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

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

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




Репутация:   94  


Цитата(aperon @ 13.6.2009, 19:10) *
чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
QAction * insertWidget ( QAction * before, QWidget * widget ) Оно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
aperon
  опции профиля:
сообщение 13.6.2009, 16:17
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 5.6.2009
Из: Kyiv
Пользователь №: 803

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 13.6.2009, 15:58) *
Цитата(aperon @ 13.6.2009, 19:10) *
чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
QAction * insertWidget ( QAction * before, QWidget * widget ) Оно?

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


А просто заменить никак нельзя, правильно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.6.2009, 17:16
Сообщение #4


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

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

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




Репутация:   94  


Цитата(aperon @ 13.6.2009, 20:17) *
А просто заменить никак нельзя, правильно?
можно попробовать так:
Создаёшь указатель на QWidget
QWidget *wgt = 0;

В нужный момент инициализируешь его желаемым объектом.
wgt = new MyWidget(...);

А при смене удаляешь старый объект и переиницализирушь указатель новым
if (!wgt)
    delete wgt;
wgt = new MyNewWidget(...);


Но тогда пользоваться таким виджетом нужно с приведением типа, например:
MyNewWidget *w = qobject_cast<MyNewWidget *>(wgt);
w->someNewMetod();// Это метод класса MyNewWidget

или
MyWidget *w = qobject_cast<MyWidget *>(wgt);
w->someMetod();// Это метод класса MyWidget

В зависимости от того, какой виджет в данный момент используется
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
aperon
  опции профиля:
сообщение 13.6.2009, 17:32
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 5.6.2009
Из: Kyiv
Пользователь №: 803

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




Репутация:   0  


Вы точно обобщили суть задачи и ее решение. Большое спасибо. Насчет приведения, это понятно по-умолчанию. Жаль только, что нет возможности сделать такую операцию визуально незаметной.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.6.2009, 17:52
Сообщение #6


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

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

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




Репутация:   94  


Цитата(aperon @ 13.6.2009, 21:32) *
Жаль только, что нет возможности сделать такую операцию визуально незаметной.
ну если тип виджета изменяется (и стало быть внешний вид), то этого уже не скроешь.

Чтобы дерготни было поменьше, можно для панели инструментов воспользоватся методом setUpdateEnable()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
aperon
  опции профиля:
сообщение 13.6.2009, 19:49
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 5.6.2009
Из: Kyiv
Пользователь №: 803

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




Репутация:   0  


OK. Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 15.6.2009, 7:57
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(aperon @ 13.6.2009, 18:32) *
Жаль только, что нет возможности сделать такую операцию визуально незаметной.

у меня точно такая же задача стояла.
в resizeEvent() ToolBar`a сделал пропорциональное изменения его содержимого, и при замене действия либо виджета в нем слежу чтобы старый и новый виджет были одинакового размера -- визуально при замене ToolBar теперь не "скачет".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
aperon
  опции профиля:
сообщение 15.6.2009, 15:16
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 5.6.2009
Из: Kyiv
Пользователь №: 803

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




Репутация:   0  


Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 9.12.2019, 8:21