6#include <winrt/Windows.Foundation.Collections.h>
8using namespace winrt::Windows::Foundation;
9using namespace winrt::Windows::Devices::Enumeration;
15 m_watcher(DeviceInformation::CreateWatcher(
selector))
17 qRegisterMetaType<winrt::hstring>(
"winrt::hstring");
21 winrt::Windows::Devices::Enumeration::DeviceInformationKind kind)
24 qRegisterMetaType<winrt::hstring>(
"winrt::hstring");
25 const winrt::param::iterable<winrt::hstring> extra {};
26 m_watcher = DeviceInformation::CreateWatcher(
selector, extra, kind);
37 qWarning(
"Windows failed to create an instance of DeviceWatcher. "
38 "Detection of Bluetooth devices might not work correctly.");
54 if (m_watcher && canStop()) {
55 unsubscribeFromEvents();
60void QBluetoothDeviceWatcherWinRT::subscribeToEvents()
62 Q_ASSERT(m_watcher.Status() == DeviceWatcherStatus::Created);
65 auto thisPtr = shared_from_this();
66 m_addedToken = m_watcher.Added([thisPtr](DeviceWatcher,
const DeviceInformation &
info) {
67 emit thisPtr->deviceAdded(
info.Id(), thisPtr->m_id);
70 m_watcher.Removed([thisPtr](DeviceWatcher,
const DeviceInformationUpdate &upd) {
71 emit thisPtr->deviceRemoved(upd.Id(), thisPtr->m_id);
74 m_watcher.Updated([thisPtr](DeviceWatcher,
const DeviceInformationUpdate &upd) {
75 emit thisPtr->deviceUpdated(upd.Id(), thisPtr->m_id);
78 using WinRtInspectable = winrt::Windows::Foundation::IInspectable;
80 m_watcher.EnumerationCompleted([thisPtr](DeviceWatcher,
const WinRtInspectable &) {
81 emit thisPtr->enumerationCompleted(thisPtr->m_id);
83 m_stoppedToken = m_watcher.Stopped([thisPtr](DeviceWatcher,
const WinRtInspectable &) {
84 emit thisPtr->watcherStopped(thisPtr->m_id);
88void QBluetoothDeviceWatcherWinRT::unsubscribeFromEvents()
90 m_watcher.Added(m_addedToken);
91 m_watcher.Removed(m_removedToken);
92 m_watcher.Updated(m_updatedToken);
93 m_watcher.EnumerationCompleted(m_enumerationToken);
94 m_watcher.Stopped(m_stoppedToken);
97bool QBluetoothDeviceWatcherWinRT::canStop()
const
99 const auto status = m_watcher.Status();
101 return status == DeviceWatcherStatus::Started
102 || status == DeviceWatcherStatus::EnumerationCompleted;
~QBluetoothDeviceWatcherWinRT()
QBluetoothDeviceWatcherWinRT(int id, winrt::hstring selector)
Combined button and popup list for selecting options.
QFileInfo info(fileName)
[8]
QFileSelector selector
[1]