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.
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());
}