Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
mainwindow.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
4#include <QtWidgets>
5
6#include "../include/mainwindow.h"
7
8MainWindow::MainWindow()
9{
10 QMenu *fileMenu = new QMenu(tr("&File"));
11
12 QAction *quitAction = fileMenu->addAction(tr("E&xit"));
13 quitAction->setShortcut(tr("Ctrl+Q"));
14
15 QMenu *itemsMenu = new QMenu(tr("&Items"));
16
17 insertAction = itemsMenu->addAction(tr("&Insert Item"));
18 removeAction = itemsMenu->addAction(tr("&Remove Item"));
19 removeAction->setEnabled(false);
20 itemsMenu->addSeparator();
21 ascendingAction = itemsMenu->addAction(tr("Sort in &Ascending Order"));
22 descendingAction = itemsMenu->addAction(tr("Sort in &Descending Order"));
23 autoSortAction = itemsMenu->addAction(tr("&Automatically Sort Items"));
24 autoSortAction->setCheckable(true);
25 itemsMenu->addSeparator();
26 QAction *findItemsAction = itemsMenu->addAction(tr("&Find Items"));
27 findItemsAction->setShortcut(tr("Ctrl+F"));
28
29 menuBar()->addMenu(fileMenu);
30 menuBar()->addMenu(itemsMenu);
31
32/* For convenient quoting:
33 //! [0]
34 QTreeWidget *treeWidget = new QTreeWidget(this);
35 //! [0]
36*/
37 treeWidget = new QTreeWidget(this);
38 //! [1]
39 treeWidget->setColumnCount(2);
40 //! [1]
41
42 //! [2]
43 QStringList headers;
44 headers << tr("Subject") << tr("Default");
45 treeWidget->setHeaderLabels(headers);
46 //! [2]
47
48 connect(quitAction, &QAction::triggered, this, &QWidget::close);
49 connect(ascendingAction, &QAction::triggered, this, &MainWindow::sortAscending);
50 connect(autoSortAction, &QAction::triggered, this, &MainWindow::updateSortItems);
51 connect(descendingAction, &QAction::triggered, this, &MainWindow::sortDescending);
52 connect(findItemsAction, &QAction::triggered, this, &MainWindow::findItems);
53 connect(insertAction, &QAction::triggered, this, &MainWindow::insertItem);
54 connect(removeAction, &QAction::triggered, this, &MainWindow::removeItem);
55 connect(treeWidget, &QTreeWidget::currentItemChanged,
56 this, &MainWindow::updateMenus);
57
58 setupTreeItems();
59 updateMenus(treeWidget->currentItem());
60
61 setCentralWidget(treeWidget);
62 setWindowTitle(tr("Tree Widget"));
63}
64
66{
67 //! [3]
68 QTreeWidgetItem *cities = new QTreeWidgetItem(treeWidget);
69 cities->setText(0, tr("Cities"));
70 QTreeWidgetItem *osloItem = new QTreeWidgetItem(cities);
71 osloItem->setText(0, tr("Oslo"));
72 osloItem->setText(1, tr("Yes"));
73 //! [3]
74
75 (new QTreeWidgetItem(cities))->setText(0, tr("Stockholm"));
76 (new QTreeWidgetItem(cities))->setText(0, tr("Helsinki"));
77 (new QTreeWidgetItem(cities))->setText(0, tr("Copenhagen"));
78
79 //! [4] //! [5]
80 QTreeWidgetItem *planets = new QTreeWidgetItem(treeWidget, cities);
81 //! [4]
82 planets->setText(0, tr("Planets"));
83 //! [5]
84 (new QTreeWidgetItem(planets))->setText(0, tr("Mercury"));
85 (new QTreeWidgetItem(planets))->setText(0, tr("Venus"));
86
87 QTreeWidgetItem *earthItem = new QTreeWidgetItem(planets);
88 earthItem->setText(0, tr("Earth"));
89 earthItem->setText(1, tr("Yes"));
90
91 (new QTreeWidgetItem(planets))->setText(0, tr("Mars"));
92 (new QTreeWidgetItem(planets))->setText(0, tr("Jupiter"));
93 (new QTreeWidgetItem(planets))->setText(0, tr("Saturn"));
94 (new QTreeWidgetItem(planets))->setText(0, tr("Uranus"));
95 (new QTreeWidgetItem(planets))->setText(0, tr("Neptune"));
96 (new QTreeWidgetItem(planets))->setText(0, tr("Pluto"));
97}
98
100{
101 QString itemText = QInputDialog::getText(this, tr("Find Items"),
102 tr("Text to find (including wildcards):"));
103
104 if (itemText.isEmpty())
105 return;
106
107 const QList<QTreeWidgetItem *> items = treeWidget->selectedItems();
108 for (QTreeWidgetItem *item : items)
109 item->setSelected(false);
110
111 //! [7]
112 const QList<QTreeWidgetItem *> found = treeWidget->findItems(
113 itemText, Qt::MatchWildcard);
114
115 for (QTreeWidgetItem *item : found) {
116 item->setSelected(true);
117 // Show the item->text(0) for each item.
118 }
119 //! [7]
120}
121
123{
124 QTreeWidgetItem *currentItem = treeWidget->currentItem();
125
126 if (!currentItem)
127 return;
128
129 QString itemText = QInputDialog::getText(this, tr("Insert Item"),
130 tr("Input text for the new item:"));
131
132 if (itemText.isEmpty())
133 return;
134
135 //! [8]
136 QTreeWidgetItem *parent = currentItem->parent();
137 QTreeWidgetItem *newItem;
138 if (parent)
139 newItem = new QTreeWidgetItem(parent, treeWidget->currentItem());
140 else
141 //! [8] //! [9]
142 newItem = new QTreeWidgetItem(treeWidget, treeWidget->currentItem());
143 //! [9]
144
145 newItem->setText(0, itemText);
146}
147
149{
150 QTreeWidgetItem *currentItem = treeWidget->currentItem();
151
152 if (!currentItem)
153 return;
154
155 //! [10]
156 QTreeWidgetItem *parent = currentItem->parent();
157 int index;
158
159 if (parent) {
160 index = parent->indexOfChild(treeWidget->currentItem());
161 delete parent->takeChild(index);
162 } else {
163 index = treeWidget->indexOfTopLevelItem(treeWidget->currentItem());
164 delete treeWidget->takeTopLevelItem(index);
165 }
166 //! [10]
167}
168
170{
171 treeWidget->sortItems(0, Qt::AscendingOrder);
172}
173
175{
176 treeWidget->sortItems(0, Qt::DescendingOrder);
177}
178
179void MainWindow::updateMenus(QTreeWidgetItem *current)
180{
181 insertAction->setEnabled(current != 0);
182 removeAction->setEnabled(current != 0);
183}
184
186{
187 ascendingAction->setEnabled(!autoSortAction->isChecked());
188 descendingAction->setEnabled(!autoSortAction->isChecked());
189
190 treeWidget->setSortingEnabled(autoSortAction->isChecked());
191}
void sortAscending()
void sortDescending()
void setupTreeItems()
void insertItem()
void findItems()
void updateSortItems()
void updateMenus(QTreeWidgetItem *current)
void removeItem()