Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Замена объекта
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
aperon
Здравствуйте, форумчане. К примеру, в тулбаре имеем несколько объектов, среди которых QSlider. В процессе реботы программы есть необходимость заменить слайдер на другой объект, скжем Phonon::SeekSlider. Подскажите или ткните носом на ответ, как мне такое сделать, чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
Litkevich Yuriy
Цитата(aperon @ 13.6.2009, 19:10) *
чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
QAction * insertWidget ( QAction * before, QWidget * widget ) Оно?
aperon
Цитата(Litkevich Yuriy @ 13.6.2009, 15:58) *
Цитата(aperon @ 13.6.2009, 19:10) *
чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
QAction * insertWidget ( QAction * before, QWidget * widget ) Оно?

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


А просто заменить никак нельзя, правильно?
Litkevich Yuriy
Цитата(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
Вы точно обобщили суть задачи и ее решение. Большое спасибо. Насчет приведения, это понятно по-умолчанию. Жаль только, что нет возможности сделать такую операцию визуально незаметной.
Litkevich Yuriy
Цитата(aperon @ 13.6.2009, 21:32) *
Жаль только, что нет возможности сделать такую операцию визуально незаметной.
ну если тип виджета изменяется (и стало быть внешний вид), то этого уже не скроешь.

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

у меня точно такая же задача стояла.
в resizeEvent() ToolBar`a сделал пропорциональное изменения его содержимого, и при замене действия либо виджета в нем слежу чтобы старый и новый виджет были одинакового размера -- визуально при замене ToolBar теперь не "скачет".
aperon
Спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.