Qt - kontrolka QColumnView

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

Listing 1
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QStandardItemModel>
  5. namespace Ui {
  6. class MainWindow;
  7. }
  8. class MainWindow : public QMainWindow
  9. {
  10. Q_OBJECT
  11. QStandardItemModel *columnTableModel; // model dla kontrolki QColumnWidget
  12. void resizeEvent(QResizeEvent *) override;
  13. public:
  14. explicit MainWindow(QWidget *parent = 0);
  15. ~MainWindow();
  16. private:
  17. Ui::MainWindow *ui;
  18. };
  19. #endif // MAINWINDOW_H

Kod programu 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. // tworzę obiekt klasy QStandardItemModel
  9. columnTableModel = new QStandardItemModel(ui->columnView);
  10. // podpinam go pod kontrolkę typu QColumnView
  11. ui->columnView->setModel(columnTableModel);
  12. // dane do stworzenia elementów widoku
  13. QMap<QString, QList<QString>> continents = {
  14. { "Europa", {"Polska", "Francja", "Hiszpania"} },
  15. { "Australia", {"Australia"} },
  16. { "Azja", {"Rosja", "Indie", "Chiny"} }
  17. };
  18. // tworzę iterator
  19. QMapIterator<QString, QList<QString>> continent(continents);
  20. while(continent.hasNext())
  21. {
  22. continent.next();
  23. // tworzę grupę kontynentu
  24. QStandardItem *group = new QStandardItem(continent.key());
  25. // dodaję państawa do danej grupy kontynantu
  26. foreach (QString country, continent.value())
  27. {
  28. QStandardItem *child = new QStandardItem(country);
  29. // dodaję do głównej grupy
  30. group->appendRow(child);
  31. }
  32. // dodaję do głównego modelu
  33. columnTableModel->appendRow(group);
  34. }
  35. // ustawiam szerokości poszczególnych kolumn
  36. ui->columnView->setColumnWidths( {150, 150} );
  37. }
  38. MainWindow::~MainWindow()
  39. {
  40. delete ui;
  41. }
  42. void MainWindow::resizeEvent(QResizeEvent *event){
  43. QWidget::resizeEvent(event);
  44. QRect size = ui->centralWidget->geometry();
  45. ui->columnView->setGeometry(0, 0, size.width(), size.height());
  46. }
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-4.8/qcolumnview.html - opis klasy QColumnView dostępny na stronie Qt

Komentarze