Russian Qt Forum
Ноябрь 26, 2024, 17:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QTabWidget+QTreeWidget+...  (Прочитано 8370 раз)
kataklysm
Гость
« : Ноябрь 08, 2010, 12:48 »

Как правильно добавлять новую вкладку в QTabWidget c новым QTreeWidget.
tabWidget->addTab(new QTreeWidget(),"Блабла") не катит.

Проблема в том что QTreeWidget должен быть уникальным в каждой вкладке(для работы с данными в нем). QTreeWidget - n-количество.
Код:
QTreeWidget **tree
tree= new QTreeWidget*[size];
for(....)
tree[i] = new QTreeWidget;
ИМХО тут не катит, так как size изначально не известен.

Натолкните пожалуйста на мысль, спасибо.
« Последнее редактирование: Ноябрь 08, 2010, 12:49 от kataklysm » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 08, 2010, 13:02 »

А чем tabWidget->addTab(new QTreeWidget(),"Блабла") не катит?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kataklysm
Гость
« Ответ #2 : Ноябрь 08, 2010, 13:09 »

А чем tabWidget->addTab(new QTreeWidget(),"Блабла") не катит?
А разве так можно будет обращаться к каждому QTreeWidget? Если можно то подскажите пожалуйста. Спасибо.

Например вот так:

Код:
QTreeWidgetItem *item = new QTreeWidgetItem;
item->setText(0, t_str);
item->setText(1, a_str);
item->setText(2, l_str);
treeWidget->addTopLevelItem(item);
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Ноябрь 08, 2010, 13:16 »

QWidget * QTabWidget::widget ( int index ) const

Т.е.
Код
C++ (Qt)
QTreeWidget *w = qobject_cast <QTreeWidget*> (tabWidget->widget (0));
if (w) {
 //Some code
}
 

И назначай родителя для QTreeWidget, т.е.
tabWidget->addTab(new QTreeWidget (tabWidget),"Блабла")
Чтобы избежать утечек.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Ноябрь 08, 2010, 13:20 »

Когда виджет кладется на табвиджет, будет сделан репарент. Иначе как он положится?) Ну или протести, если не лень.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Ноябрь 08, 2010, 13:25 »

Не важно. Лучше приучиться указывать родителя.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kataklysm
Гость
« Ответ #6 : Ноябрь 08, 2010, 16:49 »

Код:
    QTreeWidget *w = qobject_cast <QTreeWidget*> (tabWidget->widget(0));
    if (w) {
qDebug()<<"TRUE"
      w->setAlternatingRowColors(true);
      w->setColumnCount(2);
      tabWidget->addTab(w,itemout->text(0));
    }
Ну собственно так и получается. Вкладки не добавляется, а заменяется.
« Последнее редактирование: Ноябрь 08, 2010, 17:32 от kataklysm » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Ноябрь 08, 2010, 17:11 »

tabWidget->addTab(w,itemout->text(0)); - это зачем??? w и так уже есть вкладка tabWidget'а.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Ноябрь 08, 2010, 17:30 »

я разве где-то говорил, что 1 виджет можно добавить несколько раз?) Вроде нет, не надо меня цитировать)
А вот сейчас говорю - один виджет нельзя добавить несколько раз на одну (или не одну) табвиджету
Записан
kataklysm
Гость
« Ответ #9 : Ноябрь 08, 2010, 18:19 »

tabWidget->addTab(w,itemout->text(0)); - это зачем??? w и так уже есть вкладка tabWidget'а.

Спасибо большое Вам. Все работает.
Записан
kataklysm
Гость
« Ответ #10 : Ноябрь 10, 2010, 18:06 »

Код:
    QTreeWidget *w = qobject_cast <QTreeWidget*> (tabWidget->widget(i));
    if (w) {
      w->setAlternatingRowColors(true);
      w->setColumnCount(2);
    }
Ну собственно так и получается. Вкладки не добавляется, а заменяется.

И как после этого получить доступ к w (QTreeWidget) в другом классе? Извините за глупость если что Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Ноябрь 10, 2010, 18:18 »

В каком классе? И зачем?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kataklysm
Гость
« Ответ #12 : Ноябрь 10, 2010, 18:24 »

В каком классе? И зачем?
В слоте. По нажатию на кнопку должен обновится список в QTreeWidget, который является в свою очередь "ребенком" у QTabWidget. Спасибо.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Ноябрь 10, 2010, 18:26 »

Посылай сигнал главному окну, а он пусть обновит.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kataklysm
Гость
« Ответ #14 : Ноябрь 10, 2010, 22:04 »

Посылай сигнал главному окну, а он пусть обновит.

Извиняюсь, не совсем понял или плохо объяснил.

Добавляю табы к QTabWidget и загружаю первичный данные:
Код:
tabWidget->addTab(new QTreeWidget(tabWidget),itemout->text(0));

w = qobject_cast <QTreeWidget*> (tabWidget->widget(p));
    if (w)
    {
        w->setAlternatingRowColors(true);
        w->setColumnCount(2);
        w->setHeaderLabels(headerTopic);
        w->setAlternatingRowColors(true);
        connect(w,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(open_browser()));
        ............
    }

И как обновить данные в 3 w(QTreeWidget), имея родителя QTabWidget, в другом слоте.

Например так:
Код:
  
QTreeWidgetItem *item = new QTreeWidgetItem;
                item->setText(0, t_str);
                item->setText(1, a_str);
                item->setText(2, l_str);
                //item->setText(3, m_str);
                 w->addTopLevelItem(item); //Не въехал...

Спасибо.
« Последнее редактирование: Ноябрь 10, 2010, 22:06 от kataklysm » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 23.