Название: [РЕШЕНО] QObject::connect и Qt::UniqueConnection - ошибка Отправлено: Yegor от Март 30, 2015, 21:34 Здравствуйте, уважаемые форумчане!
Использую: Qt 5.4.0 компилятор: mingw 4.9.1 32bit OS: Windows 7 Хочу соединить сигнал со слотом, чтобы соединение было между двумя параллельными потоками, и была гарантия, что соединение будет установлено не более одного раза подряд. Так как в программе это соединение будет произвольное количество раз соединяться/разъединяться, и возможен случай нескольких таких соединений подряд. По логике, для этого нужно в методе connect, в конечном аргументе прописать: Код: Qt::QueuedConnection | Qt::UniqueConnection Но у меня при компиляции с такой такой формой записи возникает ошибка: Цитировать error: invalid conversion from 'int' to 'Qt::ConnectionType' [-fpermissive] А если сделать Код: Qt::UniqueConnection То есть элемент перечисления Код: Qt::UniqueConnection Хотя в assistant пишеться, что: Цитировать This is a flag that can be combined with any one of the above connection types, using a bitwise OR. When Qt::UniqueConnection is set, QObject::connect() will fail if the connection already exists (i.e. if the same signal is already connected to the same slot for the same pair of objects). This flag was introduced in Qt 4.6. А мне нужно именно Код: Qt::QueuedConnection | Qt::UniqueConnection Подскажите, пожалуйста, что я делаю не так. Название: Re: QObject::connect и Qt::UniqueConnection - ошибка Отправлено: System от Март 30, 2015, 22:35 Код
Название: Re: QObject::connect и Qt::UniqueConnection - ошибка Отправлено: kibsoft от Март 30, 2015, 22:53 По логике, если вам не нужен тип
Код: Qt::BlockingQueuedConnection Код: Qt::UniqueConnection Код: Qt::AutoConnection Код: Qt::QueuedConnection | Qt::UniqueConnection P.S. Если не так, прошу исправить. Название: Re: QObject::connect и Qt::UniqueConnection - ошибка Отправлено: Yegor от Март 31, 2015, 10:32 У меня выдает ошибку, когда я пытаюсь комбинировать Qt::UniqueConnection с любым другим типом. Является ли единственным правильным выходом
Цитировать static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection); ?Мне нужен именно Qt::QueuedConnection указанный явно. Так как при выполнении программы объект высылающий сигнал, и объект-получатель могут находиться то в одном, то в разных потоках. И еще меня интересует вопрос: если соединения сделать Qt::AutoConnection. А затем, уже после этого соединения, объекты перемещаются то в один, то в разные потоки, будет ли меняться автоматически тип уже ранее созданного подключения? То есть меняться между Qt::AutoConnection и Qt::QueuedConnection? Название: Re: QObject::connect и Qt::UniqueConnection - ошибка Отправлено: System от Март 31, 2015, 12:30 У меня выдает ошибку, когда я пытаюсь комбинировать Qt::UniqueConnection с любым другим типом. Вероятно, всё же не типом, а значением перечисления Qt::ConnectionType. Правильно выдаёт ошибку. Почитайте что-нибудь относительно перечислений в C/C++ и неявном преобразовании их типов. Если упрощённо, то при арифметических и побитовых операциях перечисления преобразуются к целому типу, но обратное приведение типов автоматически не выполняется.Является ли единственным правильным выходом Да. Это единственный правильный выход. Можно ещё предложить парочку неправильных:Цитировать static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection); ?Код Первое тупо преобразует в Qt::ConnectionType, даже не пытаясь проверить возможность преобразования. Это так называемое преобразование в стиле C. Второе делает то же самое, но в стиле C++. Самое правильное - static_cast, который на стадии компиляции заорёт, если сочтёт преобразование неверным. Название: Re: QObject::connect и Qt::UniqueConnection - ошибка Отправлено: Авварон от Март 31, 2015, 12:32 Первое тупо преобразует в Qt::ConnectionType, даже не пытаясь проверить возможность преобразования. Это так называемое преобразование в стиле C. Второе делает то же самое, но в стиле C++. Самое правильное - static_cast, который на стадии компиляции заорёт, если сочтёт преобразование неверным. Код: Qt::ConnectionType(Qt::QueuedConnection | Qt::UniqueConnection); Название: Re: QObject::connect и Qt::UniqueConnection - ошибка Отправлено: qate от Март 31, 2015, 14:19 Мне нужен именно Qt::QueuedConnection указанный явно. Так как при выполнении программы объект высылающий сигнал, и объект-получатель могут находиться то в одном, то в разных потоках. как это объекты бегает между потоками, интересно зачем ? Название: Re: [РЕШЕНО] QObject::connect и Qt::UniqueConnection - ошибка Отправлено: Yegor от Март 31, 2015, 15:18 Спасибо большое всем за полезные ответы! Проблема решена.
|