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 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 QTreeWidget *treeWidget = new QTreeWidget(this);
34 */
35
36 treeWidget = new QTreeWidget(this);
37 treeWidget->setColumnCount(2);
38 QStringList headers;
39 headers << tr("Subject") << tr("Default");
40 treeWidget->setHeaderLabels(headers);
41
42 connect(quitAction, &QAction::triggered, this, &QWidget::close);
43 connect(ascendingAction, &QAction::triggered, this, &MainWindow::sortAscending);
44 connect(autoSortAction, &QAction::triggered, this, &MainWindow::updateSortItems);
45 connect(descendingAction, &QAction::triggered, this, &MainWindow::sortDescending);
46 connect(findItemsAction, &QAction::triggered, this, &MainWindow::findItems);
47 connect(insertAction, &QAction::triggered, this, &MainWindow::insertItem);
48 connect(removeAction, &QAction::triggered, this, &MainWindow::removeItem);
49 connect(treeWidget, &QTreeWidget::currentItemChanged,
50 this, &MainWindow::updateMenus);
51
52 setupTreeItems();
53 updateMenus(treeWidget->currentItem());
54
55 setCentralWidget(treeWidget);
56 setWindowTitle(tr("Tree Widget"));
57}
58
60{
61 QTreeWidgetItem *planets = new QTreeWidgetItem(treeWidget);
62 planets->setText(0, tr("Planets"));
63 (new QTreeWidgetItem(planets))->setText(0, tr("Mercury"));
64 (new QTreeWidgetItem(planets))->setText(0, tr("Venus"));
65
66 QTreeWidgetItem *earthItem = new QTreeWidgetItem(planets);
67 earthItem->setText(0, tr("Earth"));
68 earthItem->setText(1, tr("Yes"));
69
70 (new QTreeWidgetItem(planets))->setText(0, tr("Mars"));
71 (new QTreeWidgetItem(planets))->setText(0, tr("Jupiter"));
72 (new QTreeWidgetItem(planets))->setText(0, tr("Saturn"));
73 (new QTreeWidgetItem(planets))->setText(0, tr("Uranus"));
74 (new QTreeWidgetItem(planets))->setText(0, tr("Neptune"));
75 (new QTreeWidgetItem(planets))->setText(0, tr("Pluto"));
76}
77
79{
80 QString itemText = QInputDialog::getText(this, tr("Find Items"),
81 tr("Text to find:"));
82
83 if (itemText.isEmpty())
84 return;
85
86 //! [0]
87 QTreeWidgetItemIterator it(treeWidget);
88 while (*it) {
89 if ((*it)->text(0) == itemText)
90 (*it)->setSelected(true);
91 ++it;
92 }
93 //! [0]
94}
95
97{
98 QTreeWidgetItem *currentItem = treeWidget->currentItem();
99
100 if (!currentItem)
101 return;
102
103 QString itemText = QInputDialog::getText(this, tr("Insert Item"),
104 tr("Input text for the new item:"));
105
106 if (itemText.isEmpty())
107 return;
108
109 QTreeWidgetItem *parent = currentItem->parent();
110 QTreeWidgetItem *newItem;
111 if (parent)
112 newItem = new QTreeWidgetItem(parent, treeWidget->currentItem());
113 else
114 newItem = new QTreeWidgetItem(treeWidget, treeWidget->currentItem());
115
116 newItem->setText(0, itemText);
117}
118
120{
121 QTreeWidgetItem *currentItem = treeWidget->currentItem();
122
123 if (!currentItem)
124 return;
125
126 QTreeWidgetItem *parent = currentItem->parent();
127 int index;
128
129 if (parent) {
130 index = parent->indexOfChild(treeWidget->currentItem());
131 delete parent->takeChild(index);
132 } else {
133 index = treeWidget->indexOfTopLevelItem(treeWidget->currentItem());
134 delete treeWidget->takeTopLevelItem(index);
135 }
136}
137
139{
140 treeWidget->sortItems(0, Qt::AscendingOrder);
141}
142
144{
145 treeWidget->sortItems(0, Qt::DescendingOrder);
146}
147
148void MainWindow::updateMenus(QTreeWidgetItem *current)
149{
150 insertAction->setEnabled(current != 0);
151 removeAction->setEnabled(current != 0);
152}
153
155{
156 ascendingAction->setEnabled(!autoSortAction->isChecked());
157 descendingAction->setEnabled(!autoSortAction->isChecked());
158
159 treeWidget->setSortingEnabled(autoSortAction->isChecked());
160}
void sortAscending()
void sortDescending()
void setupTreeItems()
void insertItem()
void findItems()
void updateSortItems()
void updateMenus(QTreeWidgetItem *current)
void removeItem()