Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Август 27, 2013, 13:44



Название: QLayout
Отправлено: demaker от Август 27, 2013, 13:44
Скажите
Код
C++ (Qt)
void QLayout::removeWidget ( QWidget * widget )
 
удаляет widget из QLayout или нет???
По доке удаляет
Тогда не пойму почему у меня не перерисовывает нормально.
Вот код

Код
C++ (Qt)
 
enum active_table {stantion,device,function};
 
class tableWidget: public QWidget
{
   Q_OBJECT
 
public:
   explicit tableWidget(QWidget*parent = 0);
   virtual ~tableWidget();
 
protected:
   virtual void contextMenuEvent(QContextMenuEvent *);
 
public Q_SLOTS:
   void sl_tablestantion(TableStantion *);
   void sl_tabledevice(TableDevice *);
 
public:
   QTableWidget*table;
   QVBoxLayout *vb;
 
   active_table table_flag;
   TableStantion *tbs;
   TableDevice *tbd;
   TableFunctionDev *tbf;
};
 

Код
C++ (Qt)
void tableWidget::sl_tablestantion(TableStantion *tb)
{
   switch(table_flag)
   {
   case stantion:
       vb->removeWidget(tbs);
       break;
 
   case device:
       vb->removeWidget(tbd);
       break;
 
   case function:
       vb->removeWidget(tbf);
       break;
   }
 
   table_flag = stantion;
   tbs = tb;
   vb->addWidget(tb);
   qDebug()<<"table_flag = "<<table_flag;
}
 
void tableWidget::sl_tabledevice(TableDevice *tb)
{
   switch(table_flag)
   {
   case stantion:
       vb->removeWidget(tbs);
       break;
 
   case device:
       vb->removeWidget(tbd);
       break;
 
   case function:
       vb->removeWidget(tbf);
       break;
   }
 
   table_flag = device;
   tbd = tb;
   vb->addWidget(tb);
   qDebug()<<"table_flag = "<<table_flag;
 
}
 
 
 


Название: Re: QLayout
Отправлено: kambala от Август 27, 2013, 14:38
хоть бы картинки показал что не так

addWidget() всегда добавляет в конец (вниз для вертикального) если дело в этом. также удаление виджета из лэйаута не означает удаление самого виджета или его скрытие.


Название: Re: QLayout
Отправлено: kibsoft от Август 27, 2013, 14:39
Непонятно что у вас там не так перерисовывает, но скорее всего ваш косяк.
Вот что гласит документация:
Цитировать
Removes the widget widget from the layout. After this call, it is the caller's responsibility to give the widget a reasonable geometry or to put the widget back into a layout.


Название: Re: QLayout
Отправлено: demaker от Август 27, 2013, 15:08
хоть бы картинки показал что не так

На первой картинке мы начинаем добавлять станции


Название: Re: QLayout
Отправлено: demaker от Август 27, 2013, 15:09
Вторая картинка
Перешли на станцию
должна отображаться таблица устройств, но их нет т.к мы их не добавляли


Название: Re: QLayout
Отправлено: demaker от Август 27, 2013, 15:12
Третья картинка, переходим обратно на базу, но таблица станций пустая