Russian Qt Forum

Qt => Qt Embedded => Тема начата: xintrea от Январь 06, 2014, 14:39



Название: [Решено] Сегфолтится QApplication::clipboard() в Андроиде.
Отправлено: xintrea от Январь 06, 2014, 14:39
Инструментарий:

- QtCreator 3.0.0,
- Qt 5.2
- android-ndk r9c
- android-sdk r22.3
- Сборка под armeabi-v7a

Сделал минимальный проект, чтобы продемонстрировать проблему.

А именно, имеем код:

Код
C++ (Qt)
   qDebug() << "Before clipboard check";
 
   if(QApplication::clipboard()->mimeData()->hasFormat("text/plain"))
    qDebug() << "Clipboard include text data";
 
   qDebug() << "After clipboard check";
 

Ошибка в глубинах QApplication::clipboard()->mimeData()->hasFormat("text/plain"). На этой строке происходит сегфолт при запуске в Андроидной виртуалке.

Вроде как метод статический, никаких проблем с памятью быть не должно. Тем не менее сегфолтится.

Может кто-нибудь сказать что здесь не так?

Файл (2,6 кб): http://rghost.ru/51439194




Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: Old от Январь 06, 2014, 15:07
А можно точнее, в каком именно методе:
QApplication::clipboard()
mimeData()
hasFormat()

Точно clipboard или mimeData не возвращают 0?


Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: xintrea от Январь 06, 2014, 15:20
А можно точнее, в каком именно методе:
QApplication::clipboard()
mimeData()
hasFormat()

Точно clipboard или mimeData не возвращают 0?

Разложил на :

Код
C++ (Qt)
   const QClipboard *clipboard = QApplication::clipboard();
   const QMimeData *mimeData = clipboard->mimeData();
   if(mimeData->hasFormat("text/plain"))
    qDebug() << "Clipboard include text data";

Затыкается на mimeData->hasFormat("text/plain").



Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: Old от Январь 06, 2014, 15:22
Проверь нчто возвоащает mimeData, не 0 ли?


Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: xintrea от Январь 06, 2014, 15:26
Проверь нчто возвоащает mimeData, не 0 ли?


Ноль.

И что теперь с этим делать?


Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: Old от Январь 06, 2014, 15:30
И что теперь с этим делать?
Проверять. Ты просто пытаешься вызвать hasFormat для несуществующего объекта.
Как только в буфере появятся данные, будет возвращаться указатель на валидный объект QMimeData.


Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: xintrea от Январь 06, 2014, 16:57
Все, спасибо!

MyTetra запустилась и в эмуляторе и на железке.


Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: xintrea от Январь 06, 2014, 16:59

Кстати, как ты ухитрился на железке распахнуть окно на весь экран?


Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: Old от Январь 06, 2014, 17:01
Кстати, как ты ухитрился на железке распахнуть окно на весь экран?
Ээээ, а как она у тебя выглядит? У меня все программы распахиваются на весь экран. :)


Название: Re: Сегфолтится QApplication::clipboard() в Андроиде. Можно как-нибудь побороть?
Отправлено: xintrea от Январь 06, 2014, 17:16
Ээээ, а как она у тебя выглядит? У меня все программы распахиваются на весь экран. :)

Ну у нее пока что в конфиге заданы начальные размеры окна. На десктопе на весь экран разворачивается соответствующей кнопкой.

В андроиде кнопок управления окном нет, а у тебя развернуто.

UPD

Ага, разобрался. Достаточно переключиться на другую программу и потом обратно.