qt6-bb10/examples/widgets/itemviews
Giuseppe D'Angelo 25351dcc54 Long live QKeyCombination!
C++20 via P1120 is deprecating arithmetic operations between
unrelated enumeration types, and GCC 10 is already complaining.
Hence, these operations might become illegal in C++23 or C++26 at
the latest.

A case of this that affects Qt is in key combinations: a
QKeySequence can be constructed by summing / ORing modifiers and a
key, for instance:

  Qt::CTRL + Qt::Key_A
  Qt::SHIFT | Qt::CTRL | Qt::Key_G (recommended, see below)

The problem is that the modifiers and the key belong to different
enumerations (and there's 2 enumerations for the modifier, and one
for the key).

To solve this: add a dedicated class to represent a combination of
keys, and operators between those enumerations to build instances
of this class.

I would've simply defined operator|, but again docs and pre-existing
code use operator+ as well, so added both to at least tackle simple
cases (modifier + key).

Multiple modifiers create a problem: operator+ between them yields
int, not the corresponding flags type (because operator+ is not
overloaded for this use case):

  Qt::CTRL + Qt::SHIFT + Qt::Key_A
  \__________________/      /
          int              /
           \______________/
                  int

Not only this loses track of the datatypes involved, but it would
also then "add" the key (with NO warnings, now its int + enum, so
it's not mixing enums!) and yielding int again.

I don't want to special-case this; the point of the class is
that int is the wrong datatype. Everything works just fine when
using operator| instead:

  Qt::CTRL | Qt::SHIFT | Qt::Key_A
  \__________________/      /
      Qt::Modifiers        /
           \______________/
            QKeyCombination

So I'm defining operator+ so that the simple cases still work,
but also deprecating it.

Port some code around Qt to the new class. In certain cases,
it's a huge win for clarity. In some others, I've just added
the necessary casts to make it still compile without warnings,
without attempting refactorings.

[ChangeLog][QtCore][QKeyCombination] New class to represent
a combination of a key and zero or more modifiers, to be used
when defining shortcuts or similar.

[ChangeLog][Potentially Source-Incompatible Changes] A keyboard
modifier (such as Qt::CTRL, Qt::AltModifier, etc.) should be
combined with a key (such as Qt::Key_A, Qt::Key_F1, etc.) by using
operator|, not operator+.  The result is now an object of type
QKeyCombination, that stores the key and the modifiers.

Change-Id: I657a3a328232f059023fff69c5031ee31cc91dd6
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-09-03 07:00:31 +02:00
..
addressbook High-DPI: Remove usage of Qt::AA_EnableHighDpiScaling 2020-08-28 20:08:43 +02:00
basicsortfiltermodel CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
chart Replace QAbstractItemView::viewOptions with initViewItemOption 2020-08-26 18:02:58 +02:00
coloreditorfactory CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
combowidgetmapper CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
customsortfiltermodel CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
dirview CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
editabletreemodel CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
fetchmore CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
flattreeview CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
frozencolumn CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
interview CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
pixelator CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
puzzle Disentangle QIODevice dependencies 2020-08-15 20:55:31 +02:00
simpledommodel CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
simpletreemodel CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
simplewidgetmapper CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
spinboxdelegate CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
spreadsheet High-DPI: Remove usage of Qt::AA_EnableHighDpiScaling 2020-08-28 20:08:43 +02:00
stardelegate CMake: Regenerate examples 2020-07-09 09:38:28 +02:00
storageview Long live QKeyCombination! 2020-09-03 07:00:31 +02:00
.prev_CMakeLists.txt CMake: Regenerate examples/widgets/ projects 2020-04-29 22:48:38 +02:00
CMakeLists.txt CMake: Regenerate examples/widgets/ projects 2020-04-29 22:48:38 +02:00
README
itemviews.pro Make sure we can build with -no-feature-draganddrop 2018-05-29 18:31:35 +00:00

README

Item views are widgets that typically display data sets. Qt 4's model/view
framework lets you handle large data sets by separating the underlying data
from the way it is represented to the user, and provides support for
customized rendering through the use of delegates.


Documentation for these examples can be found via the Examples
link in the main Qt documentation.