Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qiosmenu.mm
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include <qglobal.h>
5#include <qguiapplication.h>
6#include <qpa/qplatformtheme.h>
7
8#include "qiosglobal.h"
9#include "qiosmenu.h"
10#include "qioswindow.h"
11#include "qiosinputcontext.h"
12#include "qiosintegration.h"
13#include "qiostextresponder.h"
14
15#include <algorithm>
16#include <iterator>
17
18// m_currentMenu points to the currently visible menu.
19// Only one menu will be visible at a time, and if a second menu
20// is shown on top of a first, the first one will be told to hide.
21QIOSMenu *QIOSMenu::m_currentMenu = nullptr;
22
23// -------------------------------------------------------------------------
24
25static NSString *const kSelectorPrefix = @"_qtMenuItem_";
26
27@interface QUIMenuController : UIResponder
28@end
29
30@implementation QUIMenuController {
31 QIOSMenuItemList m_visibleMenuItems;
32}
33
34- (instancetype)initWithVisibleMenuItems:(const QIOSMenuItemList &)visibleMenuItems
35{
36 if (self = [super init]) {
37 [self setVisibleMenuItems:visibleMenuItems];
38 [[NSNotificationCenter defaultCenter]
39 addObserver:self
40 selector:@selector(menuClosed)
41 name:UIMenuControllerDidHideMenuNotification object:nil];
42 }
43
44 return self;
45}
46
47- (void)dealloc
48{
49 [[NSNotificationCenter defaultCenter]
50 removeObserver:self
51 name:UIMenuControllerDidHideMenuNotification object:nil];
52 [super dealloc];
53}
54
55- (void)setVisibleMenuItems:(const QIOSMenuItemList &)visibleMenuItems
56{
57 m_visibleMenuItems = visibleMenuItems;
58 NSMutableArray<UIMenuItem *> *menuItemArray = [NSMutableArray<UIMenuItem *> arrayWithCapacity:m_visibleMenuItems.size()];
59 // Create an array of UIMenuItems, one for each visible QIOSMenuItem. Each
60 // UIMenuItem needs a callback assigned, so we assign one of the placeholder methods
61 // added to UIWindow (QIOSMenuActionTargets) below. Each method knows its own index, which
62 // corresponds to the index of the corresponding QIOSMenuItem in m_visibleMenuItems. When
63 // triggered, menuItemActionCallback will end up being called.
64 for (int i = 0; i < m_visibleMenuItems.count(); ++i) {
65 QIOSMenuItem *item = m_visibleMenuItems.at(i);
66 SEL sel = NSSelectorFromString([NSString stringWithFormat:@"%@%i:", kSelectorPrefix, i]);
67 [menuItemArray addObject:[[[UIMenuItem alloc] initWithTitle:item->m_text.toNSString() action:sel] autorelease]];
68 }
69 [UIMenuController sharedMenuController].menuItems = menuItemArray;
70 if ([UIMenuController sharedMenuController].menuVisible)
71 [[UIMenuController sharedMenuController] setMenuVisible:YES animated:NO];
72}
73
74- (void)menuClosed
75{
76 QIOSMenu::currentMenu()->dismiss();
77}
78
79- (id)targetForAction:(SEL)action withSender:(id)sender
80{
81 Q_UNUSED(sender);
82 BOOL containsPrefix = ([NSStringFromSelector(action) rangeOfString:kSelectorPrefix].location != NSNotFound);
83 return containsPrefix ? self : 0;
84}
85
86- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
87{
89 // Just return a dummy signature that NSObject can create an NSInvocation from.
90 // We end up only checking selector in forwardInvocation anyway.
91 return [super methodSignatureForSelector:@selector(methodSignatureForSelector:)];
92}
93
94- (void)forwardInvocation:(NSInvocation *)invocation
95{
96 // Since none of the menu item selector methods actually exist, this function
97 // will end up being called as a final resort. We can then handle the action.
98 NSString *selector = NSStringFromSelector(invocation.selector);
99 NSRange range = NSMakeRange(kSelectorPrefix.length, selector.length - kSelectorPrefix.length - 1);
100 NSInteger selectedIndex = [[selector substringWithRange:range] integerValue];
101 QIOSMenu::currentMenu()->handleItemSelected(m_visibleMenuItems.at(selectedIndex));
102}
103
104@end
105
106// -------------------------------------------------------------------------
107
108@interface QUIPickerView : UIPickerView <UIPickerViewDelegate, UIPickerViewDataSource>
109
110@property(retain) UIToolbar *toolbar;
111
112@end
113
114@implementation QUIPickerView {
115 QIOSMenuItemList m_visibleMenuItems;
118}
119
120- (instancetype)initWithVisibleMenuItems:(const QIOSMenuItemList &)visibleMenuItems selectItem:(const QIOSMenuItem *)selectItem
121{
122 if (self = [super init]) {
123 [self setVisibleMenuItems:visibleMenuItems selectItem:selectItem];
124
125 self.autoresizingMask = UIViewAutoresizingFlexibleWidth;
126 self.toolbar = [[[UIToolbar alloc] init] autorelease];
127 self.toolbar.frame.size = [self.toolbar sizeThatFits:self.bounds.size];
128 self.toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
129
130 UIBarButtonItem *spaceButton = [[[UIBarButtonItem alloc]
131 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
132 target:self action:@selector(closeMenu)] autorelease];
133 UIBarButtonItem *cancelButton = [[[UIBarButtonItem alloc]
134 initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
135 target:self action:@selector(cancelMenu)] autorelease];
136 UIBarButtonItem *doneButton = [[[UIBarButtonItem alloc]
137 initWithBarButtonSystemItem:UIBarButtonSystemItemDone
138 target:self action:@selector(closeMenu)] autorelease];
139 [self.toolbar setItems:@[cancelButton, spaceButton, doneButton]];
140
141 [self setDelegate:self];
142 [self setDataSource:self];
143 [self selectRow:m_selectedRow inComponent:0 animated:false];
144 [self listenForKeyboardWillHideNotification:YES];
145 }
146
147 return self;
148}
149
150- (void)setVisibleMenuItems:(const QIOSMenuItemList &)visibleMenuItems selectItem:(const QIOSMenuItem *)selectItem
151{
152 m_visibleMenuItems = visibleMenuItems;
153 m_selectedRow = visibleMenuItems.indexOf(const_cast<QIOSMenuItem *>(selectItem));
154 if (m_selectedRow == -1)
155 m_selectedRow = 0;
156 [self reloadAllComponents];
157}
158
159- (void)listenForKeyboardWillHideNotification:(BOOL)listen
160{
161 if (listen) {
162 [[NSNotificationCenter defaultCenter]
163 addObserver:self
164 selector:@selector(cancelMenu)
165 name:@"UIKeyboardWillHideNotification" object:nil];
166 } else {
167 [[NSNotificationCenter defaultCenter]
168 removeObserver:self
169 name:@"UIKeyboardWillHideNotification" object:nil];
170 }
171}
172
173- (void)dealloc
174{
175 [self listenForKeyboardWillHideNotification:NO];
176 self.toolbar = 0;
177 [super dealloc];
178}
179
180- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
181{
182 Q_UNUSED(pickerView);
184 return m_visibleMenuItems.at(row)->m_text.toNSString();
185}
186
187- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
188{
189 Q_UNUSED(pickerView);
190 return 1;
191}
192
193- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
194{
195 Q_UNUSED(pickerView);
197 return m_visibleMenuItems.length();
198}
199
200- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
201{
202 Q_UNUSED(pickerView);
205}
206
207- (void)closeMenu
208{
209 if (!m_visibleMenuItems.isEmpty())
210 QIOSMenu::currentMenu()->handleItemSelected(m_visibleMenuItems.at(m_selectedRow));
211 else
212 QIOSMenu::currentMenu()->dismiss();
213}
214
215- (void)cancelMenu
216{
217 QIOSMenu::currentMenu()->dismiss();
218}
219
220@end
221
222// -------------------------------------------------------------------------
223
226 , m_visible(true)
227 , m_text(QString())
228 , m_role(MenuRole(0))
229 , m_enabled(true)
230 , m_separator(false)
231 , m_menu(0)
232{
233}
234
239
241{
242 m_menu = static_cast<QIOSMenu *>(menu);
243}
244
249
254
259
260#ifndef QT_NO_SHORTCUT
262{
263 m_shortcut = sequence;
264}
265#endif
266
271
272
274 : QPlatformMenu()
275 , m_enabled(true)
276 , m_visible(false)
277 , m_text(QString())
278 , m_menuType(DefaultMenu)
279 , m_effectiveMenuType(DefaultMenu)
280 , m_parentWindow(0)
281 , m_targetItem(0)
282 , m_menuController(0)
283 , m_pickerView(0)
284{
285}
286
288{
289 dismiss();
290}
291
293{
294 if (!before) {
295 m_menuItems.append(static_cast<QIOSMenuItem *>(menuItem));
296 } else {
297 int index = m_menuItems.indexOf(static_cast<QIOSMenuItem *>(before)) + 1;
298 m_menuItems.insert(index, static_cast<QIOSMenuItem *>(menuItem));
299 }
300 if (m_currentMenu == this)
301 syncMenuItem(menuItem);
302}
303
305{
306 m_menuItems.removeOne(static_cast<QIOSMenuItem *>(menuItem));
307 if (m_currentMenu == this)
308 syncMenuItem(menuItem);
309}
310
312{
313 if (m_currentMenu != this)
314 return;
315
316 switch (m_effectiveMenuType) {
317 case EditMenu:
318 [m_menuController setVisibleMenuItems:filterFirstResponderActions(visibleMenuItems())];
319 break;
320 default:
321 [m_pickerView setVisibleMenuItems:visibleMenuItems() selectItem:m_targetItem];
322 break;
323 }
324}
325
327{
328 m_text = text;
329}
330
332{
333 m_enabled = enabled;
334}
335
336void QIOSMenu::setVisible(bool visible)
337{
338 m_visible = visible;
339}
340
342{
343 m_menuType = type;
344}
345
347{
348 emit menuItem->activated();
349 dismiss();
350
351 if (QIOSMenu *menu = menuItem->m_menu) {
352 menu->setMenuType(m_effectiveMenuType);
353 menu->showPopup(m_parentWindow, m_targetRect, 0);
354 }
355}
356
357void QIOSMenu::showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item)
358{
359 if (m_currentMenu == this || !parentWindow)
360 return;
361
363
364 m_parentWindow = const_cast<QWindow *>(parentWindow);
365 m_targetRect = targetRect;
366 m_targetItem = static_cast<const QIOSMenuItem *>(item);
367
368 if (!m_parentWindow->isActive())
369 m_parentWindow->requestActivate();
370
371 if (m_currentMenu && m_currentMenu != this)
372 m_currentMenu->dismiss();
373
374 m_currentMenu = this;
375 m_effectiveMenuType = m_menuType;
377
378 switch (m_effectiveMenuType) {
379 case EditMenu:
380 toggleShowUsingUIMenuController(true);
381 break;
382 default:
383 toggleShowUsingUIPickerView(true);
384 break;
385 }
386
387 m_visible = true;
388}
389
391{
392 if (m_currentMenu != this)
393 return;
394
396
398
399 switch (m_effectiveMenuType) {
400 case EditMenu:
401 toggleShowUsingUIMenuController(false);
402 break;
403 default:
404 toggleShowUsingUIPickerView(false);
405 break;
406 }
407
408 m_currentMenu = nullptr;
409 m_visible = false;
410}
411
412void QIOSMenu::toggleShowUsingUIMenuController(bool show)
413{
414 if (show) {
415 Q_ASSERT(!m_menuController);
416 m_menuController = [[QUIMenuController alloc] initWithVisibleMenuItems:filterFirstResponderActions(visibleMenuItems())];
417 repositionMenu();
418 connect(qGuiApp->inputMethod(), &QInputMethod::keyboardRectangleChanged, this, &QIOSMenu::repositionMenu);
419 } else {
420 disconnect(qGuiApp->inputMethod(), &QInputMethod::keyboardRectangleChanged, this, &QIOSMenu::repositionMenu);
421
422 Q_ASSERT(m_menuController);
423 [[UIMenuController sharedMenuController] setMenuVisible:NO animated:YES];
424 [m_menuController release];
425 m_menuController = nullptr;
426 }
427}
428
429void QIOSMenu::toggleShowUsingUIPickerView(bool show)
430{
431 static QObject *focusObjectWithPickerView = nullptr;
432
433 if (show) {
434 Q_ASSERT(!m_pickerView);
435 m_pickerView = [[QUIPickerView alloc] initWithVisibleMenuItems:visibleMenuItems() selectItem:m_targetItem];
436
437 Q_ASSERT(!focusObjectWithPickerView);
438 focusObjectWithPickerView = qApp->focusWindow()->focusObject();
439 focusObjectWithPickerView->installEventFilter(this);
440 qApp->inputMethod()->update(Qt::ImEnabled | Qt::ImPlatformData);
441 } else {
442 Q_ASSERT(focusObjectWithPickerView);
443 focusObjectWithPickerView->removeEventFilter(this);
444 focusObjectWithPickerView = nullptr;
445
446 Q_ASSERT(m_pickerView);
447 [m_pickerView listenForKeyboardWillHideNotification:NO];
448 [m_pickerView release];
449 m_pickerView = nullptr;
450
451 qApp->inputMethod()->update(Qt::ImEnabled | Qt::ImPlatformData);
452 }
453}
454
456{
457 if (event->type() == QEvent::InputMethodQuery) {
458 QInputMethodQueryEvent *queryEvent = static_cast<QInputMethodQueryEvent *>(event);
459 if (queryEvent->queries() & Qt::ImPlatformData) {
460 // Let object fill inn default query results
461 obj->event(queryEvent);
462
463 QVariantMap imPlatformData = queryEvent->value(Qt::ImPlatformData).toMap();
464 imPlatformData.insert(kImePlatformDataInputView, QVariant::fromValue(static_cast<void *>(m_pickerView)));
465 imPlatformData.insert(kImePlatformDataInputAccessoryView, QVariant::fromValue(static_cast<void *>(m_pickerView.toolbar)));
466 imPlatformData.insert(kImePlatformDataHideShortcutsBar, true);
467 queryEvent->setValue(Qt::ImPlatformData, imPlatformData);
468 queryEvent->setValue(Qt::ImEnabled, true);
469
470 return true;
471 }
472 }
473
475}
476
477QIOSMenuItemList QIOSMenu::visibleMenuItems() const
478{
479 QIOSMenuItemList visibleMenuItems;
480 visibleMenuItems.reserve(m_menuItems.size());
481 std::copy_if(m_menuItems.begin(), m_menuItems.end(), std::back_inserter(visibleMenuItems),
482 [](QIOSMenuItem *item) { return item->m_enabled && item->m_visible && !item->m_separator; });
483 return visibleMenuItems;
484}
485
486QIOSMenuItemList QIOSMenu::filterFirstResponderActions(const QIOSMenuItemList &menuItems)
487{
488 // UIResponderStandardEditActions found in first responder will be prepended to the edit
489 // menu automatically (or e.g made available as buttons on the virtual keyboard). So we
490 // filter them out to avoid duplicates, and let first responder handle the actions instead.
491 // In case of QIOSTextResponder, edit actions will be converted to key events that ends up
492 // triggering the shortcuts of the filtered menu items.
493 QIOSMenuItemList filteredMenuItems;
494 UIResponder *responder = [UIResponder qt_currentFirstResponder];
495
496 for (int i = 0; i < menuItems.count(); ++i) {
497 QIOSMenuItem *menuItem = menuItems.at(i);
498#ifndef QT_NO_SHORTCUT
499 QKeySequence shortcut = menuItem->m_shortcut;
500 if ((shortcut == QKeySequence::Cut && [responder canPerformAction:@selector(cut:) withSender:nil])
501 || (shortcut == QKeySequence::Copy && [responder canPerformAction:@selector(copy:) withSender:nil])
502 || (shortcut == QKeySequence::Paste && [responder canPerformAction:@selector(paste:) withSender:nil])
503 || (shortcut == QKeySequence::Delete && [responder canPerformAction:@selector(delete:) withSender:nil])
504 || (shortcut == QKeySequence::SelectAll && [responder canPerformAction:@selector(selectAll:) withSender:nil])
505 || (shortcut == QKeySequence::Undo && [responder canPerformAction:@selector(undo) withSender:nil])
506 || (shortcut == QKeySequence::Redo && [responder canPerformAction:@selector(redo) withSender:nil])
507 || (shortcut == QKeySequence::Bold && [responder canPerformAction:@selector(toggleBoldface:) withSender:nil])
508 || (shortcut == QKeySequence::Italic && [responder canPerformAction:@selector(toggleItalics:) withSender:nil])
509 || (shortcut == QKeySequence::Underline && [responder canPerformAction:@selector(toggleUnderline:) withSender:nil])) {
510 continue;
511 }
512#endif
513 filteredMenuItems.append(menuItem);
514 }
515 return filteredMenuItems;
516}
517
518void QIOSMenu::repositionMenu()
519{
520 switch (m_effectiveMenuType) {
521 case EditMenu: {
522 UIView *view = reinterpret_cast<UIView *>(m_parentWindow->winId());
523 [[UIMenuController sharedMenuController] setTargetRect:m_targetRect.toCGRect() inView:view];
524 [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES];
525 break; }
526 default:
527 break;
528 }
529}
530
532{
533 if (position < 0 || position >= m_menuItems.size())
534 return 0;
535 return m_menuItems.at(position);
536}
537
539{
540 for (int i = 0; i < m_menuItems.size(); ++i) {
541 QPlatformMenuItem *item = m_menuItems.at(i);
542 if (item->tag() == tag)
543 return item;
544 }
545 return 0;
546}
\inmodule QtCore
Definition qcoreevent.h:45
@ InputMethodQuery
Definition qcoreevent.h:261
void focusObjectChanged(QObject *focusObject)
This signal is emitted when final receiver of events tied to focus is changed.
QString m_text
Definition qiosmenu.h:41
void setText(const QString &text) override
Definition qiosmenu.mm:235
QIOSMenu * m_menu
Definition qiosmenu.h:45
void setIsSeparator(bool) override
Definition qiosmenu.mm:250
void setVisible(bool isVisible) override
Definition qiosmenu.mm:245
bool m_enabled
Definition qiosmenu.h:43
bool m_visible
Definition qiosmenu.h:40
bool m_separator
Definition qiosmenu.h:44
MenuRole m_role
Definition qiosmenu.h:42
void setShortcut(const QKeySequence &) override
Definition qiosmenu.mm:261
void setRole(MenuRole role) override
Definition qiosmenu.mm:255
void setEnabled(bool enabled) override
Definition qiosmenu.mm:267
void setMenu(QPlatformMenu *) override
Definition qiosmenu.mm:240
QKeySequence m_shortcut
Definition qiosmenu.h:46
void dismiss() override
Definition qiosmenu.mm:390
QPlatformMenuItem * menuItemAt(int position) const override
Definition qiosmenu.mm:531
void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) override
Definition qiosmenu.mm:292
void removeMenuItem(QPlatformMenuItem *menuItem) override
Definition qiosmenu.mm:304
void setText(const QString &) override
Definition qiosmenu.mm:326
QPlatformMenuItem * menuItemForTag(quintptr tag) const override
Definition qiosmenu.mm:538
static QIOSMenu * currentMenu()
Definition qiosmenu.h:76
void setVisible(bool visible) override
Definition qiosmenu.mm:336
void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) override
Definition qiosmenu.mm:357
bool eventFilter(QObject *obj, QEvent *event) override
Filters events if this object has been installed as an event filter for the watched object.
Definition qiosmenu.mm:455
void syncMenuItem(QPlatformMenuItem *) override
Definition qiosmenu.mm:311
void handleItemSelected(QIOSMenuItem *menuItem)
Definition qiosmenu.mm:346
void setEnabled(bool enabled) override
Definition qiosmenu.mm:331
void setMenuType(MenuType type) override
Definition qiosmenu.mm:341
The QInputMethodQueryEvent class provides an event sent by the input context to input objects.
Definition qevent.h:679
void keyboardRectangleChanged()
The QKeySequence class encapsulates a key sequence as used by shortcuts.
qsizetype size() const noexcept
Definition qlist.h:397
iterator insert(qsizetype i, parameter_type t)
Definition qlist.h:488
bool removeOne(const AT &t)
Definition qlist.h:598
iterator end()
Definition qlist.h:626
const_reference at(qsizetype i) const noexcept
Definition qlist.h:446
qsizetype count() const noexcept
Definition qlist.h:398
iterator begin()
Definition qlist.h:625
void reserve(qsizetype size)
Definition qlist.h:753
void append(parameter_type t)
Definition qlist.h:458
iterator insert(const Key &key, const T &value)
Definition qmap.h:688
T value(const Key &key, const T &defaultValue=T()) const
Definition qmap.h:357
\inmodule QtCore
Definition qobject.h:103
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
virtual bool eventFilter(QObject *watched, QEvent *event)
Filters events if this object has been installed as an event filter for the watched object.
Definition qobject.cpp:1555
virtual quintptr tag() const
void aboutToHide()
void aboutToShow()
static QString removeMnemonics(const QString &original)
\inmodule QtCore\reentrant
Definition qrect.h:30
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
qsizetype size() const noexcept
Returns the number of characters in this string.
Definition qstring.h:186
QMap< QString, QVariant > toMap() const
Returns the variant as a QVariantMap if the variant has type() \l QMetaType::QVariantMap.
static auto fromValue(T &&value) noexcept(std::is_nothrow_copy_constructible_v< T > &&Private::CanUseInternalSpace< T >) -> std::enable_if_t< std::conjunction_v< std::is_copy_constructible< T >, std::is_destructible< T > >, QVariant >
Definition qvariant.h:536
\inmodule QtGui
Definition qwindow.h:63
QString text
UIToolbar * toolbar
Definition qiosmenu.mm:110
@ ImPlatformData
@ ImEnabled
QString self
Definition language.cpp:58
static jboolean cut(JNIEnv *, jobject)
static jboolean copy(JNIEnv *, jobject)
static jboolean paste(JNIEnv *, jobject)
static jboolean selectAll(JNIEnv *, jobject)
long NSInteger
#define qApp
AudioChannelLayoutTag tag
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define qGuiApp
static bool isSeparator(char c)
Definition qhsts.cpp:280
const char kImePlatformDataInputView[]
const char kImePlatformDataInputAccessoryView[]
const char kImePlatformDataHideShortcutsBar[]
static NSString *const kSelectorPrefix
Definition qiosmenu.mm:25
QPointer< QObject > m_focusObjectWithPickerView
Definition qiosmenu.mm:116
NSInteger m_selectedRow
Definition qiosmenu.mm:117
GLuint index
[2]
GLenum GLuint id
[7]
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLsizei range
GLenum type
struct _cl_event * event
GLhandleARB obj
[2]
GLenum GLenum GLsizei void * row
static qreal component(const QPointF &point, unsigned int i)
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
#define emit
#define Q_UNUSED(x)
size_t quintptr
Definition qtypes.h:167
#define enabled
view show()
[18] //! [19]
QFileSelector selector
[1]
myObject disconnect()
[26]
QGraphicsItem * item
edit isVisible()
stack undo()
QMenu menu
[5]
socketLayer listen()
QQuickView * view
[0]
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
Definition qlist.h:962