Почему я могу выбирать и редактировать ячейки моего QTableWidget на эмуляторе Android, но не на реальном телефоне?Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Почему я могу выбирать и редактировать ячейки моего QTableWidget на эмуляторе Android, но не на реальном телефоне?

Сообщение Гость »


Я разрабатываю приложение для ПК и Android, используя Qt Creator и C++. Для части моего приложения у меня есть QTableWidget, в который пользователь может добавлять записи и редактировать информацию внутри полей.
Как на ПК, так и на AVD, который я использовал для проверки того, как приложение будет работать на Android, я могу без проблем редактировать поля таблицы. Однако теперь, когда я подключил настоящий телефон Android к своему компьютеру и протестировал на нем приложение, я не могу выбирать флажки. Независимо от того, где я нажимаю или насколько сильно нажимаю, поля не выбираются.
Изображение
А вот вывод приложения. Стоит отметить, что строка «AccessibilityEvent с пустым описанием», похоже, появляется только тогда, когда я нажимаю на пустое поле в таблице.

Код: Выделить всё

I e.ChickenChart: Late-enabling -Xcheck:jni
E e.ChickenChart: Unknown bits set in runtime_flags: 0x8000
W System  : ClassLoader referenced unknown path:
W e.ChickenChart: Accessing hidden method Landroid/content/ContextWrapper;-\>getDisplay()Landroid/view/Display; (greylist, linking, allowed)
I QtCore  : Start
I Qt      : qt started
I AdrenoGLES: QUALCOMM build                   : 961b24f, Ib57168459a
I AdrenoGLES: Build Date                       : 02/24/20
I AdrenoGLES: OpenGL ES Shader Compiler Version: EV031.27.05.06
I AdrenoGLES: Local Branch                     :
I AdrenoGLES: Remote Branch                    :
I AdrenoGLES: Remote Branch                    :
I AdrenoGLES: Reconstruct Branch               :
I AdrenoGLES: Build Config                     : S L 8.0.12 AArch32
I AdrenoGLES: PFP: 0x005ff113, ME: 0x005ff066
W Gralloc3: mapper 3.x is not supported
W Qt A11Y : Could not (yet) activate platform accessibility.
W Qt A11Y : AccessibilityEvent with empty description
I chatty  : uid=10397(org.qtproject.example.ChickenCharts) identical 1 line
W Qt A11Y : AccessibilityEvent with empty description
W Qt A11Y : AccessibilityEvent with empty description
W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483627
W Qt A11Y : AccessibilityEvent with empty description
W Qt A11Y : AccessibilityEvent with empty description
W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483565
W Qt A11Y : AccessibilityEvent with empty description
W Qt A11Y : AccessibilityEvent with empty description
W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483566
W Qt A11Y : AccessibilityEvent with empty description
13:05:31:

"org.qtproject.example.ChickenCharts" died.
Я попытался избавиться от QScroller, прикрепленного к QTableWidget, думая, что QScroller каким-то образом блокировал ввод в саму таблицу. Однако это ничего не помогло.
Я также пробовал изменить режим выбора таблицы, но это опять же не сработало. Я не понимаю, в чем может быть проблема.
(ОБНОВЛЕНИЕ):
Как предложил Хайд , я создал простое приложение, которое содержит только окно с QTableWidget. Он полностью содержится в main(), а в таблице только одна ячейка.
Я тестировал его как на настольном компьютере, так и на своем телефоне. На рабочем столе ячейку можно было редактировать как обычно, но на Android, хотя ячейка и выделялась, когда я касался ее, я не мог ее редактировать.
Я пытался это исправить. проблема в этом небольшом тестовом приложении, но пока мне это не удалось. Я также проверил, установлен ли для ячейки флаг ItemIsEditable, и так оно и было. Если проблема не исчезнет, ​​я могу рассмотреть возможность изменения диаграммы для использования QML.
Вот минимальный воспроизводимый пример, который можно использовать в Qt Creator:

Код: Выделить всё

#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *window = new QWidget();

QVBoxLayout *v_layout = new QVBoxLayout(window);
QTableWidget *table = new QTableWidget();

table->setRowCount(1);
table->setColumnCount(1);

v_layout->addWidget(table);

window->show();
return a.exec();
}
(UPDATE 2)
Как рекомендовал musicamante, я переопределил метод event() QTableWidget и распечатал полученные события на консоль. Вот событие, которое я получал каждый раз, когда постучал по столу:

Код: Выделить всё

D libTableTest_armeabi-v7a.so: QEvent::InputMethodQuery
Это будет появляться независимо от того, где я постучал по столу; Это событие будет отправлено даже при нажатии на пустое место без ячеек. Если бы я нажал на ячейку, я бы также получил следующие три строки, за которыми последовало бы другое событие примерно через секунду:

Код: Выделить всё

W Qt A11Y : AccessibilityEvent with empty description
W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483635
W Qt A11Y : AccessibilityEvent with empty description
D libTableTest_armeabi-v7a.so: QEvent::Timer // this appears after a short delay
Я пробовал устанавливать различные атрибуты таблицы. Установка атрибута WA_AcceptTouchEvents в значение true приведет к появлению другого события при нажатии в любом месте стола:

Код: Выделить всё

D libTableTest_armeabi-v7a.so: QEvent::TouchBegin
Но в остальном изменений в поведении нет. Установка WA_TouchPadAcceptSingleTouchEvents не меняет поведение и не вводит никаких новых событий в выходные данные.
Я протестировал AA_SynthesizeMouseForUnhandledTouchEvents, и по умолчанию для него установлено
значение true. Установка значения false удалила этот вывод всякий раз, когда я нажимал на ячейку:

Код: Выделить всё

W Qt A11Y : AccessibilityEvent with empty description
W Qt A11Y : AccessibilityNodeInfo with empty contentDescription: -2147483635
W Qt A11Y : AccessibilityEvent with empty description
But the cells would also no longer be highlighted when I tapped on them.
At one point during my tests and experiments I was actually able to select a cell and open the keyboard without needing the partial fix I had made in my first answer, however after this happened I was not able to do it again and no matter how much I tapped or pressed on the cells they couldn't be edited.


Источник: https://stackoverflow.com/questions/781 ... emulator-b
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»