Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2625 razy

Kontrolka QColumnView umożliwia utworzenie listy wyboru, gdzie kliknięcie jednej opcji powoduje pojawienie się odpowiadającej jej kolejnym opcjom. Widok takiej kontrolki pokazany został na poniższym rysunku.

Qt Creator - przykładowy widok działania kontrolki QColumnView
Rys. 1
Qt Creator - przykładowy widok działania kontrolki QColumnView

Kod w pliku mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStandardItemModel> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT QStandardItemModel *columnTableModel; // model dla kontrolki QColumnWidget void resizeEvent(QResizeEvent *) override; 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ę obiekt klasy QStandardItemModel columnTableModel = new QStandardItemModel(ui->columnView); // podpinam go pod kontrolkę typu QColumnView ui->columnView->setModel(columnTableModel); // dane do stworzenia elementów widoku QMap<QString, QList<QString>> continents = { { "Europa", {"Polska", "Francja", "Hiszpania"} }, { "Australia", {"Australia"} }, { "Azja", {"Rosja", "Indie", "Chiny"} } }; // tworzę iterator QMapIterator<QString, QList<QString>> continent(continents); while(continent.hasNext()) { continent.next(); // tworzę grupę kontynentu QStandardItem *group = new QStandardItem(continent.key()); // dodaję państawa do danej grupy kontynantu foreach (QString country, continent.value()) { QStandardItem *child = new QStandardItem(country); // dodaję do głównej grupy group->appendRow(child); } // dodaję do głównego modelu columnTableModel->appendRow(group); } // ustawiam szerokości poszczególnych kolumn ui->columnView->setColumnWidths( {150, 150} ); } MainWindow::~MainWindow() { delete ui; } void MainWindow::resizeEvent(QResizeEvent *event){ QWidget::resizeEvent(event); QRect size = ui->centralWidget->geometry(); ui->columnView->setGeometry(0, 0, size.width(), size.height()); }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-4.8/qcolumnview.html - opis klasy QColumnView dostępny na stronie Qt