Russian Qt Forum

Qt => Общие вопросы => Тема начата: Дуб от Апрель 14, 2006, 13:48



Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: Дуб от Апрель 14, 2006, 13:48
Добрый день?
Как сделать, чтобы все item'ы содержали колонку с checkBox'ом для каждого элемента дерева? (в отдельной колонке)
Или LineEdit? Спасибо.


Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: IPFreely от Апрель 15, 2006, 11:31
смотри

$QTDIR/examples/itemviews/spinboxdelegate


Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: Steven_Orko от Апрель 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.


Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: Дуб от Апрель 17, 2006, 10:38
Понадобится скорее всего QLineEdit.


Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: Steven_Orko от Апрель 17, 2006, 17:21
Сорри, я не ту функцию указал. Там есть функция-член, которая устанавливает Виджет для QListWidgetItem


Название: Нифига
Отправлено: Дуб от Апрель 18, 2006, 11:44
смотрел и Здесь (http://doc.trolltech.com/4.1/qtreewidgetitem.html) и  Тут (http://doc.trolltech.com/4.1/qtreewidget.html)  Нифига. Может я ослеп.
Пробовал создать свой TreeItem - не дает, собака.
Неужели никто так не делал?


Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: Steven_Orko от Апрель 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;
}


Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: Дуб от Апрель 19, 2006, 10:23
Честно говоря, я ожидал извращения и плясков с бубном..
Мне казалось, что setItemWidget - чтобы вставлять переопределенные какими-то ухищрениями и извратами QTreeWidgetItem на месте тех, что стоят по-умолчанию. А все оказалось настолько просто.
Вопрос решен. Огромное спасибо!


Название: Одна ерунда только
Отправлено: Дуб от Май 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(); // на этой строке прога вылетает
  ........
  // чего-то там
}



Притом, что объекты создаются, текст забивается.
Что тут не так?


Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: Steven_Orko от Май 06, 2006, 17:13
У тебя L = NULL значит... Т.е. нету у тебя Верхнего виджета  с индексом i в колонке 6.


Название: QT4.1, QTreeWidget и QLineEdit
Отправлено: evilguard от Февраль 16, 2007, 17:18
Использую QTreeWidget. В QWidgetItem встроен стандартно QCheckBox. А мне нужно чтобы был QRadioButton. Пробовал так, как предложил Steven_Orko:
ui.objectList->setItemWidget(*iter, 0, new QRadioButton());
От этого QTreeWidget перестал корректно работать, не выделяются элементы, сама радио-кнопка наезжает на текст. Подскажите как быть?