Stronę tą wyświetlono już: 2480 razy
Kontrolka QTreeWidget umożliwia tworzenie drzewiastej listy, gdzie każdy element może zawierać elementy potomne. Typowym przykładem zastosowania takiej kontrolki jest np. wyświetlanie rozwijanej struktury listy folderów w przeglądarkach.

Rys. 1
Qt Creator - przykład użycia kontrolki QTreeWidget
Kod w pliku mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
// slot podpięty pod sygnał podwójnego kliknięcia elementu w kontrolce treeWidget
void on_treeWidget_doubleClicked(const QModelIndex &index);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Kod w pliku mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->treeWidget->setColumnCount(2); // ustawiam liczbę kolumn (domyślnie jedna)
QTreeWidgetItem *itemEurope = new QTreeWidgetItem(ui->treeWidget); // tworzę główny korzeń drzewa
itemEurope->setText(0, "Europa"); // ustawiam tekst pierwszej kolumny
QIcon iconFolder(":/images/open.png"); // tworzę ikonkę folderu
QIcon iconZSRE(":/images/ue.png"); // tworzę ikonkę ZSRE
itemEurope->setIcon(0, iconFolder); // ustawiam ikonkę dla głównego korzenia
QTreeWidgetItem *itemZSRE = new QTreeWidgetItem(itemEurope); // tworzę gałąź głównego korzenia
itemZSRE->setText(0, "ZSRE"); // ustawiam tekst pierwszej kolumny
itemZSRE->setText(1, "Związek Socjalistycznych Republik Europejskich"); // ustawiam tekst drugiej kolumny
itemZSRE->setIcon(0, iconZSRE); // ustawiam ikonkę
itemEurope->addChild(itemZSRE); // dodaję element do korzenia
// lista krajów:
QStringList ZSRE = {
"Austria",
"Belgia",
"Bułgaria",
"Chorwacja",
"Cypr",
"Czechy",
"Dania",
"Estonia",
"Finlandia",
"Francja",
"Grecja",
"Hiszpania",
"Holandia",
"Irlandia",
"Litwa",
"Luksemburg",
"Łotwa",
"Malta",
"Niemcy",
"Polska",
"Portugalia",
"Rumunia",
"Słowacja",
"Słowenia",
"Szwecja",
"Węgry",
"Wielka Brytania",
"Włochy"
};
foreach(QString country, ZSRE){
QTreeWidgetItem *countryChild = new QTreeWidgetItem(itemZSRE); // tworzę element kraju
countryChild->setText(0, country); // dodaję tekst
itemZSRE->addChild(countryChild); // dodaję element potomny do itemZSRE
}
ui->treeWidget->addTopLevelItem(itemEurope); // dodaję korzeń z elementami potomnymi do kontrolki QTreeWidget
ui->treeWidget->setHeaderLabels({"Nazwa", "Opis"}); // ustawiam opis kolumn
ui->treeWidget->setColumnWidth(0, 150); // ustawiam rozmiar pierwszej kolumny
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_treeWidget_doubleClicked(const QModelIndex &index)
{
qDebug() << index.data().toString(); // wypisuję w konsoli Qt Creatora informację o klikniętym elemencie
}