Qt - kontrolka QTreeWidget

Stronę tą wyświetlono już: 41 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.

Qt Creator - przykład użycia kontrolki QTeeWidget
Rys. 1
Qt Creator - przykład użycia kontrolki QTreeWidget

Kod w pliku mainwindow.h:

Listing 1
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QDebug>
  5. namespace Ui {
  6. class MainWindow;
  7. }
  8. class MainWindow : public QMainWindow
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit MainWindow(QWidget *parent = 0);
  13. ~MainWindow();
  14. private slots:
  15. // slot podpięty pod sygnał podwójnego kliknięcia elementu w kontrolce treeWidget
  16. void on_treeWidget_doubleClicked(const QModelIndex &index);
  17. private:
  18. Ui::MainWindow *ui;
  19. };
  20. #endif // MAINWINDOW_H

Kod w pliku mainwindow.cpp:

Listing 2
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent) :
  4. QMainWindow(parent),
  5. ui(new Ui::MainWindow)
  6. {
  7. ui->setupUi(this);
  8. ui->treeWidget->setColumnCount(2); // ustawiam liczbę kolumn (domyślnie jedna)
  9. QTreeWidgetItem *itemEurope = new QTreeWidgetItem(ui->treeWidget); // tworzę główny korzeń drzewa
  10. itemEurope->setText(0, "Europa"); // ustawiam tekst pierwszej kolumny
  11. QIcon iconFolder(":/images/open.png"); // tworzę ikonkę folderu
  12. QIcon iconZSRE(":/images/ue.png"); // tworzę ikonkę ZSRE
  13. itemEurope->setIcon(0, iconFolder); // ustawiam ikonkę dla głównego korzenia
  14. QTreeWidgetItem *itemZSRE = new QTreeWidgetItem(itemEurope); // tworzę gałąź głównego korzenia
  15. itemZSRE->setText(0, "ZSRE"); // ustawiam tekst pierwszej kolumny
  16. itemZSRE->setText(1, "Związek Socjalistycznych Republik Europejskich"); // ustawiam tekst drugiej kolumny
  17. itemZSRE->setIcon(0, iconZSRE); // ustawiam ikonkę
  18. itemEurope->addChild(itemZSRE); // dodaję element do korzenia
  19. // lista krajów:
  20. QStringList ZSRE = {
  21. "Austria",
  22. "Belgia",
  23. "Bułgaria",
  24. "Chorwacja",
  25. "Cypr",
  26. "Czechy",
  27. "Dania",
  28. "Estonia",
  29. "Finlandia",
  30. "Francja",
  31. "Grecja",
  32. "Hiszpania",
  33. "Holandia",
  34. "Irlandia",
  35. "Litwa",
  36. "Luksemburg",
  37. "Łotwa",
  38. "Malta",
  39. "Niemcy",
  40. "Polska",
  41. "Portugalia",
  42. "Rumunia",
  43. "Słowacja",
  44. "Słowenia",
  45. "Szwecja",
  46. "Węgry",
  47. "Wielka Brytania",
  48. "Włochy"
  49. };
  50. foreach(QString country, ZSRE){
  51. QTreeWidgetItem *countryChild = new QTreeWidgetItem(itemZSRE); // tworzę element kraju
  52. countryChild->setText(0, country); // dodaję tekst
  53. itemZSRE->addChild(countryChild); // dodaję element potomny do itemZSRE
  54. }
  55. ui->treeWidget->addTopLevelItem(itemEurope); // dodaję korzeń z elementami potomnymi do kontrolki QTreeWidget
  56. ui->treeWidget->setHeaderLabels({"Nazwa", "Opis"}); // ustawiam opis kolumn
  57. ui->treeWidget->setColumnWidth(0, 150); // ustawiam rozmiar pierwszej kolumny
  58. }
  59. MainWindow::~MainWindow()
  60. {
  61. delete ui;
  62. }
  63. void MainWindow::on_treeWidget_doubleClicked(const QModelIndex &index)
  64. {
  65. qDebug() << index.data().toString(); // wypisuję w konsoli Qt Creatora informację o klikniętym elemencie
  66. }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5.9/qtreewidget.html - opis klasy QTreeWidget na stronie dokumentacji Qt

Komentarze