Qt - kontrolka QTreeView
Stronę tą wyświetlono już: 1710 razy
Kontrolka QTreeView umożliwia tworzenie drzewiastej listy tak samo jak wcześniej omawiana kontrolka QTreeWidget. Różnica polega na sposobie dodawania i edytowania elementów w kontrolce QTreeView, gdzie aby dodać kolejne elementy konieczne jest utworzenie obiektu klasy QStandardItemModel.

Kod programu w pliku mainwindow.h:
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- #include <QStandardItemModel>
- #include <QStandardItem>
- namespace Ui {
- class MainWindow;
- }
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- QStandardItemModel *treeViewModel; // obiekt modelu, który będzie sterował elementami kontrolki QTreeView
- void resizeEvent(QResizeEvent*) override; // obsługa zdarzenia zmiany rozmiaru okna w celu dostosowania wymiarów kontrolki QTreeView do okna głównego
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
- private:
- Ui::MainWindow *ui;
- };
- #endif // MAINWINDOW_H
Kod programu w pliku mainwindow.cpp:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- // tworzę nowy obiekt klasy QStandardItemModel
- treeViewModel = new QStandardItemModel(ui->treeView);
- // ustawiam liczbę kolumn modelu
- treeViewModel->setColumnCount(2);
- // ustawiam nazwy kolumn
- treeViewModel->setHorizontalHeaderLabels(
- {"Nazwa", "Opis"}
- );
- // tworzę główny element listy
- QStandardItem *itemEurope = new QStandardItem;
- // ustawiam jego nazwę
- itemEurope->setText("Europa");
- // tworzę podgałąź
- QStandardItem *itemZSRE = new QStandardItem;
- // ustawiam jej tekst
- itemZSRE->setText("ZSRE");
- // dodaję ją do korzenia
- itemEurope->setChild(0, 0, itemZSRE);
- // tworzę ikonkę z pliku wrzuconego do zasobów
- QIcon iconEurope(":/images/open.png");
- // podpinam ikonkę
- itemEurope->setIcon(iconEurope);
- // tworzę ikonkę z zasobów dla elementu itemZSRE
- QIcon iconZSRE(":/images/ue.png");
- // ustawiam ikonkę
- itemZSRE->setIcon(iconZSRE);
- // tworzę element z opisem
- QStandardItem *itemZSREdescription = new QStandardItem;
- // ustawiam opis
- itemZSREdescription->setText("Związek Socjalistycznych Republik Europejskich");
- // dodaję element z opisem
- itemEurope->setChild(0, 1, itemZSREdescription);
- // dodaję do modelu całą gałąź
- treeViewModel->setItem(0, 0, itemEurope);
- // lista krajów do dodania
- 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"
- };
- // zmienna do tworzenia nowych elemntów
- QStandardItem *itemCountry;
- foreach(QString country, ZSRE){
- itemCountry = new QStandardItem(country); // tworzę nową gałąź z nazwą z zmiennej country
- QBrush br(Qt::cyan); // tworzę brush z kolorem cyan jako wypełnienie
- QBrush brText(Qt::red); // tworzę brush z kolorem czerwonym jako wypełnienie
- itemCountry->setData(QVariant::fromValue(br), Qt::BackgroundRole); // ustawiam kolor tła
- itemCountry->setData(QVariant::fromValue(brText), Qt::ForegroundRole); // ustawiam kolor tekstu
- itemZSRE->setChild(itemZSRE->rowCount(), itemCountry); // dodaję element do gałęzi itemZSRE
- }
- // podpinam model pod kontrolkę treeView
- ui->treeView->setModel(treeViewModel);
- // ustawiam szerokość pierwszej kolumny
- ui->treeView->header()->resizeSection(0, 150);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::resizeEvent(QResizeEvent* event){
- QWidget::resizeEvent(event);
- QRect size = ui->centralWidget->geometry();
- // ustawiam szerokość i wysokość kontrolki treeView tak aby zajmowała obszar kontrolki centralWidget
- ui->treeView->setGeometry(0, 0, size.width(), size.height());
- }

Tytuł:
Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów
Autor:
Adrian Ostrowski, Piotr Gaczkowski

Tytuł:
Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet)
Autor:
Jerzy Grębosz

Tytuł:
Programowanie wieloplatformowe z C++ i wxWidgets 3
Autor:
Bartosz W. Warzocha

Tytuł:
Język C++ i przetwarzanie współbieżne w akcji. Wydanie II
Autor:
Anthony Williams

Tytuł:
C++ dla bystrzaków. Wydanie VII
Autor:
Stephen R. Davis

Tytuł:
Tablice informatyczne. Podstawy C++
Autor:
Radosław Sokół

Tytuł:
Opus magnum C++11. Programowanie w języku C++ (komplet)
Autor:
Jerzy Grębosz

Tytuł:
OpenCV 3. Komputerowe rozpoznawanie obrazu w C++ przy użyciu biblioteki OpenCV
Autor:
Adrian Kaehler, Gary Bradski

Tytuł:
C++ w 24 godziny. Wydanie VI
Autor:
Rogers Cadenhead, Jesse Liberty

Tytuł:
C++ Optymalizacja kodu. Sprawdzone techniki zwiększania wydajności
Autor:
Guntheroth Kurt