crossplatform.ru

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


  Ответ в Замена объекта
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
aperon Дата 15.6.2009, 15:16
  Спасибо.
kwisp Дата 15.6.2009, 7:57
 
Цитата(aperon @ 13.6.2009, 18:32) *
Жаль только, что нет возможности сделать такую операцию визуально незаметной.

у меня точно такая же задача стояла.
в resizeEvent() ToolBar`a сделал пропорциональное изменения его содержимого, и при замене действия либо виджета в нем слежу чтобы старый и новый виджет были одинакового размера -- визуально при замене ToolBar теперь не "скачет".
aperon Дата 13.6.2009, 19:49
  OK. Спасибо.
Litkevich Yuriy Дата 13.6.2009, 17:52
 
Цитата(aperon @ 13.6.2009, 21:32) *
Жаль только, что нет возможности сделать такую операцию визуально незаметной.
ну если тип виджета изменяется (и стало быть внешний вид), то этого уже не скроешь.

Чтобы дерготни было поменьше, можно для панели инструментов воспользоватся методом setUpdateEnable()
aperon Дата 13.6.2009, 17:32
  Вы точно обобщили суть задачи и ее решение. Большое спасибо. Насчет приведения, это понятно по-умолчанию. Жаль только, что нет возможности сделать такую операцию визуально незаметной.
Litkevich Yuriy Дата 13.6.2009, 17:16
 
Цитата(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, 16:17
 
Цитата(Litkevich Yuriy @ 13.6.2009, 15:58) *
Цитата(aperon @ 13.6.2009, 19:10) *
чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
QAction * insertWidget ( QAction * before, QWidget * widget ) Оно?

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


А просто заменить никак нельзя, правильно?
Litkevich Yuriy Дата 13.6.2009, 15:58
 
Цитата(aperon @ 13.6.2009, 19:10) *
чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
QAction * insertWidget ( QAction * before, QWidget * widget ) Оно?
aperon Дата 13.6.2009, 15:10
  Здравствуйте, форумчане. К примеру, в тулбаре имеем несколько объектов, среди которых QSlider. В процессе реботы программы есть необходимость заменить слайдер на другой объект, скжем Phonon::SeekSlider. Подскажите или ткните носом на ответ, как мне такое сделать, чтобы не потерялась очередность объектов в тулбаре или возможно ли такое вообще.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 13:38