PDA

View Full Version : add items to treewidget



Shien
27th December 2010, 16:55
Hi,

I have tree widget with 2 columns. But I don't know how to insert there data.

With spin box I want to choose row and then choosing from combo box value insert it into selected row. What would be easiest way to do this? Because I tried all day and nothing good happened.

high_flyer
27th December 2010, 17:21
What exactly is your problem?
Inserting items to the tree?
Combining the the spinbox and combo and tree?
And then in detail - what part?
If you want help, then please post enough information about the problem you have, what you have tried, the errors you get ect.
No one has time to try and guess what you have done, and what not.


Because I tried all day and nothing good happened.
This has no meaningful information to someone who wants to help you.

Shien
27th December 2010, 21:57
#ifndef CREATEPLANET_H
#define CREATEPLANET_H

#include <QtGui>
#include "tree.h"
class CreatePlanet : public QWidget
{
Q_OBJECT
private:

QGridLayout *grdLayout;
QTreeWidget *treeW;
QSpinBox *dwNumberSpinbox;
QComboBox *dwTypeCombo;


public:
explicit CreatePlanet(QWidget *parent = 0);
QSpinBox *sizeSpinbox;
signals:
void spinBoxValue(int);
public slots:
void applySizeButtonClicked ();
void applyDwellersTypeButtonClicked();
};

#endif // CREATEPLANET_H



#include "createplanet.h"

CreatePlanet::CreatePlanet(QWidget *parent) :
QWidget(parent)
{
QLabel *planetNameLabel = new QLabel("Name of planet:",this);
QLineEdit *planetNameEdit = new QLineEdit();
QLabel *sizeLabel = new QLabel("Select size of the planet:");
sizeSpinbox = new QSpinBox(this);
sizeSpinbox->setRange(1,7);

QPushButton *applySizeButton = new QPushButton("Apply",this);

connect(applySizeButton,SIGNAL(clicked()),this,SLO T(applySizeButtonClicked()));

treeW = new QTreeWidget(this);
treeW->setHidden(true);
treeW->setColumnCount(2);
QStringList headers;
headers << "Dwelling" << "Type";
treeW->setHeaderLabels(headers);

QLabel *dwLabel = new QLabel("Select dwellings options:",this);
dwNumberSpinbox = new QSpinBox(this);
dwNumberSpinbox->setRange(1,1);
dwTypeCombo = new QComboBox(this);
dwTypeCombo->addItem("Liquid");
dwTypeCombo->addItem("Etherial");
dwTypeCombo->addItem("Plasma");
dwTypeCombo->addItem("Solid");
dwTypeCombo->addItem("Vacuum");

QPushButton *applyDwellersTypeButton = new QPushButton("Apply",this);

connect(applyDwellersTypeButton,SIGNAL(clicked()), this,SLOT(applyDwellersTypeButtonClicked()));

grdLayout = new QGridLayout(this);

grdLayout->addWidget(planetNameLabel,0,0,1,1);
grdLayout->addWidget(planetNameEdit,0,1,1,1);
grdLayout->addWidget(sizeLabel,1,0,1,1);
grdLayout->addWidget(sizeSpinbox,1,1,1,1);
grdLayout->addWidget(applySizeButton,2,0,1,1);
grdLayout->addWidget(treeW,3,0,1,2);
grdLayout->addWidget(dwLabel,4,0,1,1);
grdLayout->addWidget(dwNumberSpinbox,5,0,1,1);
grdLayout->addWidget(dwTypeCombo,5,1,1,1);
grdLayout->addWidget(applyDwellersTypeButton,6,0,1,1);
this ->setLayout(grdLayout);
}

void CreatePlanet::applySizeButtonClicked()
{
treeW->setHidden(false);
treeW->clear();

dwNumberSpinbox->setRange(1,(sizeSpinbox->value()));
QList<QTreeWidgetItem *> dwItems;
for (int i = 1; i < sizeSpinbox->value()+1; ++i)
{
dwItems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Dwelling %1").arg(i))));
}
treeW->insertTopLevelItems(0, dwItems);

}

void CreatePlanet::applyDwellersTypeButtonClicked()
{

}


ApplyDwellersTypeButton slot shoud use values from dwNumberSpinbox as key where to put dwTypeCombo value.

This is the hardest way, I don't know how to do this.
Can anyone help me?

high_flyer
27th December 2010, 22:08
I don't know how to do this.
Do what?
Connect a signal to slot?
Again, please explain what the problem is that you have!

Shien
27th December 2010, 22:13
When I choose values from dwNumberSpinbox and dwTypeCombo and cliking apply. It should put dwTypeCombo's value to row(dwNumberSpinbox.value) in tree widget's second column.

thats the idea.

high_flyer
27th December 2010, 22:16
Ok, so now we know what you want it to do.
And what is the problem you have?
Note: problem != "should do".

Shien
27th December 2010, 22:23
First I thought that I would be able to simple to insert it into treeW with insertTopLevelItem function. In order of int index I tried to use dwNumberSpinbox->value() maybe it was good choise I don't know . because I don't how create treewidgetItem which has value of dwTypeCombo

high_flyer
27th December 2010, 22:56
because I don't how create treewidgetItem which has value of dwTypeCombo
Let me see if I understand:
you want to create a QTreeWidgetItem() that holds the value of the current selected item in the combobox?
Is that it?

Shien
28th December 2010, 06:32
something like that. while choosing swNumberSpinbox value and dwTypeCombo value to fully fill treewidget. Is it possible?

high_flyer
28th December 2010, 09:57
I am sorry, I just can't seem to understand you, and you seem unwilling to say what the problem is - which is strange if you want help.
Maybe someone else understands what your problems is, I don't.

Can't you say something along the lines of:
"I have done XXXX, in order to achive YYYY and I have problems figuring ZZZZZ out." ?!
Or anything that will explain the PROBLEM you have?


Is it possible?
"Everything" is possible.

aamer4yu
28th December 2010, 12:35
May be QTreeWidget::insertTopLevelItem will help you :)

norobro
28th December 2010, 14:57
Or QTreeWidget::topLevelItem and QTreeWidgetItem::setText

Shien
28th December 2010, 19:59
Can't you say something along the lines of:
"I have done XXXX, in order to achive YYYY and I have problems figuring ZZZZZ out." ?!
Or anything that will explain the PROBLEM you have?


I am making simple game editor. It's my studies project. Wich creates games objects. Now am trying to make planets editing part

So I managed to add elements to treewidget, but only on the first column. Can anyone tell me how to put it into second one?
Or make it as a child?


#ifndef CREATEPLANET_H
#define CREATEPLANET_H

#include <QtGui>
#include "tree.h"
class CreatePlanet : public QWidget
{
Q_OBJECT
private:

QGridLayout *grdLayout;
QTreeWidget *treeW;
QSpinBox *dwNumberSpinbox;
QComboBox *dwTypeCombo;
QTreeWidgetItem *dwIt;
QTableWidget *tableW;


public:
explicit CreatePlanet(QWidget *parent = 0);
QSpinBox *sizeSpinbox;
signals:
void spinBoxValue(int);
public slots:
void applySizeButtonClicked ();
void applyDwellersTypeButtonClicked();
};

#endif // CREATEPLANET_H

#include "createplanet.h"

CreatePlanet::CreatePlanet(QWidget *parent) :
QWidget(parent)
{
QLabel *planetNameLabel = new QLabel("Name of planet:",this);
QLineEdit *planetNameEdit = new QLineEdit();
QLabel *sizeLabel = new QLabel("Select size of the planet:");
sizeSpinbox = new QSpinBox(this);
sizeSpinbox->setRange(1,7);

QPushButton *applySizeButton = new QPushButton("Apply",this);

connect(applySizeButton,SIGNAL(clicked()),this,SLO T(applySizeButtonClicked()));

treeW = new QTreeWidget(this);
treeW->setColumnCount(2);
treeW->setHidden(true);
QStringList headers;
headers << "Dwelling" << "Type";
treeW->setHeaderLabels(headers);

QLabel *dwLabel = new QLabel("Select dwellings options:",this);
dwNumberSpinbox = new QSpinBox(this);
dwNumberSpinbox->setRange(1,1);
dwTypeCombo = new QComboBox(this);
dwTypeCombo->addItem("Liquid");
dwTypeCombo->addItem("Etherial");
dwTypeCombo->addItem("Plasma");
dwTypeCombo->addItem("Solid");
dwTypeCombo->addItem("Vacuum");

QPushButton *applyDwellersTypeButton = new QPushButton("Apply",this);

connect(applyDwellersTypeButton,SIGNAL(clicked()), this,SLOT(applyDwellersTypeButtonClicked()));

tableW = new QTableWidget(this);
tableW->setHidden(true);

grdLayout = new QGridLayout(this);

grdLayout->addWidget(planetNameLabel,0,0,1,1);
grdLayout->addWidget(planetNameEdit,0,1,1,1);
grdLayout->addWidget(sizeLabel,1,0,1,1);
grdLayout->addWidget(sizeSpinbox,1,1,1,1);
grdLayout->addWidget(applySizeButton,2,0,1,1);
grdLayout->addWidget(treeW,3,0,1,2);
grdLayout->addWidget(dwLabel,4,0,1,1);
grdLayout->addWidget(dwNumberSpinbox,5,0,1,1);
grdLayout->addWidget(dwTypeCombo,5,1,1,1);
grdLayout->addWidget(applyDwellersTypeButton,6,0,1,1);
grdLayout->addWidget(tableW,7,0,1,1);
this ->setLayout(grdLayout);
}

void CreatePlanet::applySizeButtonClicked()
{
treeW->setHidden(false);
treeW->clear();

dwNumberSpinbox->setRange(1,(sizeSpinbox->value()));
QList<QTreeWidgetItem *> dwItems;
for (int i = 1; i < sizeSpinbox->value()+1; ++i)
{
dwIt = new QTreeWidgetItem ((QTreeWidget*)0, QStringList(QString("Dwelling: %1").arg(i)));
dwItems.append(dwIt);
}
treeW->insertTopLevelItems(0, dwItems);

}

void CreatePlanet::applyDwellersTypeButtonClicked()
{

QTreeWidgetItem *dwTypeItem = new QTreeWidgetItem(QStringList(dwTypeCombo->currentText()));
// for(int i = 1; i < dwNumberSpinbox->value();++i)
//if(dwTypeItem)
// dwIt->insertChild(dwNumberSpinbox->value(),dwTypeItem);

treeW->insertTopLevelItem(dwNumberSpinbox->value(),dwTypeItem);

}


I tried to create child, but I don't know how him to put into treewidget any ideas?
Another problem is with is when I am putting dwTypeItem because now item is simple putted down on dwNumberSpinbox->value() index. But when I am filling lets say 3 items. then first one is added in corect place. but others in wrong order beacause I ussing insertTopLevelItem. after I put first element order of others becomes wrong. And I don't know how to correct it. I tired with if construction but nothing good happened.

norobro
28th December 2010, 20:17
Can anyone tell me how to put it into second one?
Did you investigate QTreeWidget::topLevelItem and QTreeWidgetItem::setText ?

Looks to me like this should work:
void CreatePlanet::applyDwellersTypeButtonClicked()
{
int row = dwNumberSpinbox->value()-1;
QString text = dwTypeCombo->currentText();
treeW->topLevelItem(row)->setText(1,text);

}

Shien
29th December 2010, 11:52
Thanks it worked.

Shien
1st January 2011, 20:40
again problem with treewidget. last time I wanted to add value form combo box. Now I need to add spinbox value. this is best what i came up with

QTreeWidgetItem *item = new QTreeWidgetItem(satelliteSizeSpinbox->value());
treeW2->insertTopLevelItem(starSatelliteNumberSpinbox->value(),item);

and again I want to put it on second column