Russian Qt Forum

Компиляторы и платформы => Mac OS X => Тема начата: Igors от Сентябрь 07, 2018, 07:59



Название: Проблема с "Copy" айтемом
Отправлено: Igors от Сентябрь 07, 2018, 07:59
Добрый день

Меню бар устанавливается Ok, но всякий раз когда я меняю текст айтема "Copy" (напр на "Copy Surface") в консоли вылазит такая бяка
Цитировать
void QCocoaMenu::insertNative(QCocoaMenuItem *, QCocoaMenuItem *) Menu item is already in a menu, remove it from the other menu first before inserting
И после этого айтем с новым именем оказывается после следующего (Paste). Конечно текст меняется и для многих др айтемов (напр того же Paste) - но там все норм. Подумал может в меню есть еще один copy, распечатал все акшны - нет, только один. Что посоветуете ?

Спасибо


Название: Re: Проблема с "Copy" айтемом
Отправлено: kambala от Сентябрь 08, 2018, 02:06
самый очевидный вариант — спуститься в нативный код


Название: Re: Проблема с "Copy" айтемом
Отправлено: Авварон от Сентябрь 08, 2018, 02:17
Что посоветуете ?

Исправить баг.


Название: Re: Проблема с "Copy" айтемом
Отправлено: Igors от Сентябрь 08, 2018, 07:40
самый очевидный вариант — спуститься в нативный код
Конечно спускался, но ничего очевидного не увидел
Код:
void QCocoaMenu::insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem)
{
    [item->nsItem() setTarget:m_delegate];
    if (!item->menu())
        [item->nsItem() setAction:@selector(itemFired:)];

    if (item->isMerged())
        return;

    if ([item->nsItem() menu]) {
        qWarning() << Q_FUNC_INFO << "Menu item is already in a menu, remove it from the other menu first before inserting";
        return;
    }
...
Breakpoint на  qWarning - пожалуйста, но почему айтем присутствует, почему он не merged и почему вообще вызывается insertNative - раскопать непросто

Исправить баг.
Слишком прямолинейно (с грыжей на танк). Попробую сначала воспроизведется ли на простом примере


Название: Re: Проблема с "Copy" айтемом
Отправлено: Igors от Сентябрь 08, 2018, 08:32
Как ни странно, воспроизвелось! (аттач). Я и не надеялся, проверил для очистки совести. Правда от этого не легче  :) Скоро буду обновляться, может само рассосется? Если не затруднит, проверьте и сообщите версию Qt

Спасибо


Название: Re: Проблема с "Copy" айтемом
Отправлено: kambala от Сентябрь 08, 2018, 22:14
в 4.8.7 все норм, в 5.9.4 воспроизводится.

про нативный код я имел в виду, что нужно тогда менять текст прямо через Cocoa.


Название: Re: Проблема с "Copy" айтемом
Отправлено: Igors от Сентябрь 09, 2018, 04:35
в 4.8.7 все норм, в 5.9.4 воспроизводится.
Спасибо за тест. Изменил текст айтема - варнинга нет. Причем если я потом верну "Copy" из приложения - все норм. Пока сделаю-ка я начальное имя "Copy " (с пробелом в конце) - настоящие герои всегда идут в обход  :)

Да, и эксперименты показали - та же проблема с айтемами "Cut" и "Paste" (во всяком случае в тестовом примере). Ото наверно как-то патчили чтобы работало для модальных диалогов, но вышло коряво