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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT4.1, QTreeWidget и QLineEdit  (Прочитано 9149 раз)
Дуб
Гость
« : Апрель 14, 2006, 13:48 »

Добрый день?
Как сделать, чтобы все item'ы содержали колонку с checkBox'ом для каждого элемента дерева? (в отдельной колонке)
Или LineEdit? Спасибо.
Записан
IPFreely
Гость
« Ответ #1 : Апрель 15, 2006, 11:31 »

смотри

$QTDIR/examples/itemviews/spinboxdelegate
Записан
Steven_Orko
Гость
« Ответ #2 : Апрель 15, 2006, 12:55 »

А чем тебе это не подходит?
void QTreeWidget::setItemExpanded ( const QTreeWidgetItem * item, bool expand )
Sets the item referred to by item to either closed or opened, depending on the value of expand.
Записан
Дуб
Гость
« Ответ #3 : Апрель 17, 2006, 10:38 »

Понадобится скорее всего QLineEdit.
Записан
Steven_Orko
Гость
« Ответ #4 : Апрель 17, 2006, 17:21 »

Сорри, я не ту функцию указал. Там есть функция-член, которая устанавливает Виджет для QListWidgetItem
Записан
Дуб
Гость
« Ответ #5 : Апрель 18, 2006, 11:44 »

смотрел и Здесь и Тут  Нифига. Может я ослеп.
Пробовал создать свой TreeItem - не дает, собака.
Неужели никто так не делал?
Записан
Steven_Orko
Гость
« Ответ #6 : Апрель 18, 2006, 19:59 »

Ну ладно, уговорил ))) Вод код. Думаю сам разберешься.
Код:


#include <QtGui/QTreeWidget>
#include <QtGui/QCheckBox>
#include <QtGui/QRadioButton>

Tree::Tree(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
ui.setupUi(this);
ui.treeWidget->setColumnCount(1);
QTreeWidgetItem* pItem;
pItem = addItem("1");
pItem = addItem("2");
QTreeWidgetItem* pW01 = addItem(pItem, "");
QTreeWidgetItem* pW02 = addItem(pItem, "");
QTreeWidgetItem* pW03 = addItem(pItem, "");
QTreeWidgetItem* pW04 = addItem(pItem, "");

pItem = addItem("3");

ui.treeWidget->setItemWidget(pW01, 0, new QCheckBox("First property"));
ui.treeWidget->setItemWidget(pW02, 0, new QCheckBox("Second Property"));
ui.treeWidget->setItemWidget(pW03, 0, new QRadioButton("QRadioButton"));
ui.treeWidget->setItemWidget(pW04, 0, new QRadioButton("QRadioButton"));
}



QTreeWidgetItem* Tree::addItem(QString name)
{
QStringList lst;
lst << name;
QTreeWidgetItem* pItem = new QTreeWidgetItem(ui.treeWidget, lst, 0);
return pItem;
}

QTreeWidgetItem* Tree::addItem(QTreeWidgetItem* item, QString name)
{
QStringList lst;
lst << name;
QTreeWidgetItem* pItem = new QTreeWidgetItem(item, lst, 0);
return pItem;
}


Все очень даже работает  )))

добавлено спустя 2 минуты:

 В первом коде виджеты вместо элементов дерева ставились. А в этом в отдельной колонке, как ты хотел. Вот код:
Код:

#include <QtGui/QTreeWidget>
#include <QtGui/QCheckBox>
#include <QtGui/QRadioButton>

Tree::Tree(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
ui.setupUi(this);
ui.treeWidget->setColumnCount(1);
QTreeWidgetItem* pItem;
pItem = addItem("1");
pItem = addItem("2");
QTreeWidgetItem* pW01 = addItem(pItem, "");
QTreeWidgetItem* pW02 = addItem(pItem, "");
QTreeWidgetItem* pW03 = addItem(pItem, "");
QTreeWidgetItem* pW04 = addItem(pItem, "");

pItem = addItem("3");

ui.treeWidget->setItemWidget(pW01, 0, new QCheckBox("First property"));
ui.treeWidget->setItemWidget(pW02, 0, new QCheckBox("Second Property"));
ui.treeWidget->setItemWidget(pW03, 0, new QRadioButton("QRadioButton"));
ui.treeWidget->setItemWidget(pW04, 0, new QRadioButton("QRadioButton"));
}



QTreeWidgetItem* Tree::addItem(QString name)
{
QStringList lst;
lst << name;
QTreeWidgetItem* pItem = new QTreeWidgetItem(ui.treeWidget, lst, 0);
return pItem;
}

QTreeWidgetItem* Tree::addItem(QTreeWidgetItem* item, QString name)
{
QStringList lst;
lst << name;
QTreeWidgetItem* pItem = new QTreeWidgetItem(item, lst, 0);
return pItem;
}
Записан
Дуб
Гость
« Ответ #7 : Апрель 19, 2006, 10:23 »

Честно говоря, я ожидал извращения и плясков с бубном..
Мне казалось, что setItemWidget - чтобы вставлять переопределенные какими-то ухищрениями и извратами QTreeWidgetItem на месте тех, что стоят по-умолчанию. А все оказалось настолько просто.
Вопрос решен. Огромное спасибо!
Записан
Дуб
Гость
« Ответ #8 : Май 06, 2006, 15:27 »

При попытке получить текст из этого QLineEdit на элементе дерева
Код:
  
QLineEdit* L;
QString buf;
int i;

for(i=0;i<treeWidget->topLevelItemCount();i++)
{
  L =  (QLineEdit*)treeWidget->itemWidget(treeWidget->topLevelItem(i),6);
   buf = L->text(); // на этой строке прога вылетает
  ........
  // чего-то там
}



Притом, что объекты создаются, текст забивается.
Что тут не так?
Записан
Steven_Orko
Гость
« Ответ #9 : Май 06, 2006, 17:13 »

У тебя L = NULL значит... Т.е. нету у тебя Верхнего виджета  с индексом i в колонке 6.
Записан
evilguard
Гость
« Ответ #10 : Февраль 16, 2007, 17:18 »

Использую QTreeWidget. В QWidgetItem встроен стандартно QCheckBox. А мне нужно чтобы был QRadioButton. Пробовал так, как предложил Steven_Orko:
ui.objectList->setItemWidget(*iter, 0, new QRadioButton());
От этого QTreeWidget перестал корректно работать, не выделяются элементы, сама радио-кнопка наезжает на текст. Подскажите как быть?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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