Автор: SABROG 23.6.2009, 11:14
Попытался сделать соединение как Qt::QueuedConnection:
connect(tbvList->selectionModel(),
SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
SLOT(tbvList_selChanged(const QItemSelection &, const QItemSelection &)), Qt::QueuedConnection);
И получил такую ошибку. Чего это он?
QObject::connect: Cannot queue arguments of type 'QItemSelection'
(Make sure 'QItemSelection' is registered using qRegisterMetaType().)
А вдруг мне понадобится такое соединение, чтобы узнать в другом потоке какой итем выбран, там ведь только Qt::QueuedConnection прокатит.
---
Я конечно понимаю, что ошибку можно обойти так:
qRegisterMetatType<QItemSelection>("QItemSelection");
Да и использовать GUI совместно с потоками нежелательно. Но у меня даже цель другая была, не поточная. Просто хотел минимизировать возможное влияние другого QEventLoop'a (навеяло из другой темы). И вот интересно кто недоглядел Qt или я?
---
Документация говорит следующее:
Цитата
Note that if you intend to use the type in queued signal and slot connections or in QObject's property system, you also have to call qRegisterMetaType() since the names are resolved at runtime.
Но QItemSelection врятли можно отнести к custom type. Хотя я и не исключаю того варианта, что сделано это было, чтобы не захламлять массив зарегистрированных типов в Qt, которые могут редко использоваться.
Автор: Litkevich Yuriy 23.6.2009, 20:35
QItemSelection - это ГПИ и, возможно, поэтому так происходит.