Dear,
Because I still not get a proper solution, might be most of user forum is easy analyze through code directlry. So I'll try to display the code in here.
source code could grab from here
here the detail of code..
//treeViewExpandCollapse.pro
HEADERS += \
form.h
SOURCES += \
form.cpp \
main.cpp
FORMS += \
form.ui
//treeViewExpandCollapse.pro
HEADERS += \
form.h
SOURCES += \
form.cpp \
main.cpp
FORMS += \
form.ui
To copy to clipboard, switch view to plain text mode
//form.h
#ifndef FORM_H
#define FORM_H
#include <QWidget>
#include <QModelIndex>
namespace Ui {
class Form;
}
{
Q_OBJECT
public:
explicit Form
(QWidget *parent
= 0);
~Form();
private:
Ui::Form *ui;
private slots:
};
#endif // FORM_H
//form.h
#ifndef FORM_H
#define FORM_H
#include <QWidget>
#include <QModelIndex>
namespace Ui {
class Form;
}
class Form : public QWidget
{
Q_OBJECT
public:
explicit Form(QWidget *parent = 0);
~Form();
private:
Ui::Form *ui;
private slots:
void slotTreeClick(QModelIndex);
};
#endif // FORM_H
To copy to clipboard, switch view to plain text mode
//form.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>240</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QTreeView" name="treeView">
<property name="geometry">
<rect>
<x>0</x>
<y>10</y>
<width>256</width>
<height>192</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>280</x>
<y>130</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>satu</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
//form.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>240</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QTreeView" name="treeView">
<property name="geometry">
<rect>
<x>0</x>
<y>10</y>
<width>256</width>
<height>192</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>280</x>
<y>130</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>satu</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
To copy to clipboard, switch view to plain text mode
//main.cpp
#include <QApplication>
#include "form.h"
int main(int argc , char* argv[])
{
Form test;
test.show();
return app.exec();
}
//main.cpp
#include <QApplication>
#include "form.h"
int main(int argc , char* argv[])
{
QApplication app(argc, argv);
Form test;
test.show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
//form.cpp
#include "form.h"
#include "ui_form.h"
#include <QStandardItemModel>
#include <QDebug>
ui(new Ui::Form)
{
ui->setupUi(this);
QList<QStandardItem *> rowItems, rowGroups;
for (int h = 0; h < 4; h++)
{
rootNode->appendRow(rowGroups[h]);
}
rowGroups[0]->appendRow(rowItems[0]);
rowGroups[0]->appendRow(rowItems[1]);
rowGroups[0]->appendRow(rowItems[2]);
rowGroups[0]->appendRow(rowItems[3]);
rowGroups[1]->appendRow(rowItems[4]);
rowGroups[1]->appendRow(rowItems[5]);
//rowGroups[1]->appendRow(rowItems[6]);
//rowGroups[1]->appendRow(rowItems[7]);
rowGroups[2]->appendRow(rowItems[8]);
//rowGroups[2]->appendRow(rowItems[9]);
//rowGroups[2]->appendRow(rowItems[10]);
//rowGroups[2]->appendRow(rowItems[11]);
rowGroups[3]->appendRow(rowItems[12]);
rowGroups[3]->appendRow(rowItems[13]);
rowGroups[3]->appendRow(rowItems[14]);
//rowGroups[3]->appendRow(rowItems[15]);
//register the model
ui->treeView->setModel(standardModel);
//ui->treeWidget->setModel(standardModel);
}
Form::~Form()
{
delete ui;
}
{
qDebug()<<"clicked " << obj.row()<<" -- " << obj.column();
//qDebug()<<obj.parent();
//qDebug()<<obj.child();
for (int i = 0; i < 4; i++)
{
qDebug() << "proces " << i;
if (i != obj.row())
{
qDebug() << "proces " << i <<" to collapse";
if (obj.sibling(i, 0).isValid())
ui->treeView->collapse(obj.sibling(i, 0));
//ui->treeView->collapse(obj.parent().child(i, 0));
}
}
qDebug()<<"finish slotTreeClick";
}
//form.cpp
#include "form.h"
#include "ui_form.h"
#include <QStandardItemModel>
#include <QDebug>
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
QStandardItemModel *standardModel = new QStandardItemModel ;
QStandardItem *rootNode = standardModel->invisibleRootItem();
QList<QStandardItem *> rowItems, rowGroups;
for (int h = 0; h < 4; h++)
{
rowGroups << new QStandardItem(QString::number(h));
rootNode->appendRow(rowGroups[h]);
}
rowItems << new QStandardItem("a1");
rowItems << new QStandardItem("a2");
rowItems << new QStandardItem("a3");
rowItems << new QStandardItem("a4");
rowItems << new QStandardItem("b1");
rowItems << new QStandardItem("b2");
rowItems << new QStandardItem("b2");
rowItems << new QStandardItem("b2");
rowItems << new QStandardItem("c1");
rowItems << new QStandardItem("c2");
rowItems << new QStandardItem("c4");
rowItems << new QStandardItem("c4");
rowItems << new QStandardItem("d1");
rowItems << new QStandardItem("d2");
rowItems << new QStandardItem("d3");
rowItems << new QStandardItem("d4");
rowGroups[0]->appendRow(rowItems[0]);
rowGroups[0]->appendRow(rowItems[1]);
rowGroups[0]->appendRow(rowItems[2]);
rowGroups[0]->appendRow(rowItems[3]);
rowGroups[1]->appendRow(rowItems[4]);
rowGroups[1]->appendRow(rowItems[5]);
//rowGroups[1]->appendRow(rowItems[6]);
//rowGroups[1]->appendRow(rowItems[7]);
rowGroups[2]->appendRow(rowItems[8]);
//rowGroups[2]->appendRow(rowItems[9]);
//rowGroups[2]->appendRow(rowItems[10]);
//rowGroups[2]->appendRow(rowItems[11]);
rowGroups[3]->appendRow(rowItems[12]);
rowGroups[3]->appendRow(rowItems[13]);
rowGroups[3]->appendRow(rowItems[14]);
//rowGroups[3]->appendRow(rowItems[15]);
//register the model
ui->treeView->setModel(standardModel);
//ui->treeWidget->setModel(standardModel);
connect(ui->treeView, SIGNAL(expanded(QModelIndex)), this, SLOT(slotTreeClick(QModelIndex)));
}
Form::~Form()
{
delete ui;
}
void Form::slotTreeClick(QModelIndex obj)
{
qDebug()<<"clicked " << obj.row()<<" -- " << obj.column();
//qDebug()<<obj.parent();
//qDebug()<<obj.child();
for (int i = 0; i < 4; i++)
{
qDebug() << "proces " << i;
if (i != obj.row())
{
qDebug() << "proces " << i <<" to collapse";
if (obj.sibling(i, 0).isValid())
ui->treeView->collapse(obj.sibling(i, 0));
//ui->treeView->collapse(obj.parent().child(i, 0));
}
}
qDebug()<<"finish slotTreeClick";
}
To copy to clipboard, switch view to plain text mode
issue to duplicate : first click 0th model (1st row tree) and then click 3rd model (4th row tree)
Regards,
Mardi
Bookmarks