Yes, I know, like in every other class.
Ok, so please run this example and tell me if it is what you want, because I did what I understand you want but as I said, it is difficult to understand your needs.
#include <QtGui>
{
Q_OBJECT
public:
tabWidget->setTabsClosable(true);
la->addWidget(treeWidget);
la->addWidget(tabWidget);
setLayout(la);
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 5; ++j) {
p->addChild(c);
}
}
connect(tabWidget, SIGNAL(tabCloseRequested(int)), SLOT(slotCloseTab(int)));
}
private slots:
QWidget *w
= itemToWidget.
value(item,
0);
if (w) {
tabWidget->setCurrentWidget(w);
return;
}
itemToWidget.insert(item, label);
widgetToItem.insert(label, item);
label->setAlignment(Qt::AlignCenter);
tabWidget->insertTab(0, label, item->text(0));
tabWidget->setCurrentIndex(0);
}
void slotCloseTab(int index) {
QWidget *w
= tabWidget
->widget
(index
);
itemToWidget.remove(widgetToItem.value(w));
widgetToItem.remove(w);
tabWidget->removeTab(index);
}
private:
QMap<QTreeWidgetItem
*,
QWidget *> itemToWidget;
};
int main(int argc, char **argv)
{
Widget w;
w.show();
return a.exec();
}
#include "main.moc"
#include <QtGui>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0) : QWidget(parent) {
treeWidget = new QTreeWidget(this);
tabWidget = new QTabWidget(this);
tabWidget->setTabsClosable(true);
QHBoxLayout *la = new QHBoxLayout;
la->addWidget(treeWidget);
la->addWidget(tabWidget);
setLayout(la);
for (int i = 0; i < 2; ++i) {
QTreeWidgetItem *p = new QTreeWidgetItem(treeWidget, QStringList() << QString("parent item %1").arg(i));
for (int j = 0; j < 5; ++j) {
QTreeWidgetItem *c = new QTreeWidgetItem(QStringList() << QString("child item %1%2").arg(i).arg(j));
p->addChild(c);
}
}
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SLOT(slotItemClicked(QTreeWidgetItem*)));
connect(tabWidget, SIGNAL(tabCloseRequested(int)), SLOT(slotCloseTab(int)));
}
private slots:
void slotItemClicked(QTreeWidgetItem *item) {
QWidget *w = itemToWidget.value(item, 0);
if (w) {
tabWidget->setCurrentWidget(w);
return;
}
QLabel *label = new QLabel(item->text(0));
itemToWidget.insert(item, label);
widgetToItem.insert(label, item);
label->setAlignment(Qt::AlignCenter);
tabWidget->insertTab(0, label, item->text(0));
tabWidget->setCurrentIndex(0);
}
void slotCloseTab(int index) {
QWidget *w = tabWidget->widget(index);
itemToWidget.remove(widgetToItem.value(w));
widgetToItem.remove(w);
tabWidget->removeTab(index);
}
private:
QTabWidget *tabWidget;
QTreeWidget *treeWidget;
QMap<QTreeWidgetItem *, QWidget *> itemToWidget;
QMap<QWidget *, QTreeWidgetItem *> widgetToItem;
};
int main(int argc, char **argv)
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
#include "main.moc"
To copy to clipboard, switch view to plain text mode
Bookmarks