[Interest] Myanmar-QWERTY crashes OS X application
Timothy W. Grove
tim_grove at sil.org
Sun Aug 28 00:39:39 CEST 2016
Below is my progress thus far in trying to create a test application.
I've created a simple app with just two QPlainTextEdit's. The only thing
else it does is to print out the name of the keyboard input source
associated with a QPlainTextEdit when you click into it. I'm unsure how
to translate the python code for changing the keyboard into C++ but I've
added comments to the "MainWindow::changeKeyboard" method below to show
my approach in python. Any help or suggestions would be most welcome.
Best regards,
Tim
mainwindow.h:
#ifndefMAINWINDOW_H
#defineMAINWINDOW_H
#include<QMainWindow>
#include<QPlainTextEdit>
classMainWindow:publicQMainWindow
{
Q_OBJECT
public:
MainWindow();
voidchangeKeyboard(QVariantkeyboard);
protected:
booleventFilter(QObject*obj,QEvent*event);
private:
QWidget*mainWidget;
QPlainTextEdit*textEdit1;
QPlainTextEdit*textEdit2;
};
#endif//MAINWINDOW_H mainwindow.cpp:
#include<QWidget> #include<QVBoxLayout> #include<QPlainTextEdit>
#include<QObject> #include<QEvent> #include<QDebug>
#include"mainwindow.h"MainWindow::MainWindow() { mainWidget=newQWidget;
setCentralWidget(mainWidget); QVBoxLayout*layout=newQVBoxLayout;
textEdit1=newQPlainTextEdit;
textEdit1->setProperty("keyboard",0x00000809);//British(Windows)
textEdit2=newQPlainTextEdit;
textEdit2->setProperty("keyboard",0x00010C00);//Myanmar(Windows)
layout->addWidget(textEdit1); layout->addWidget(textEdit2);
mainWidget->setLayout(layout);textEdit1->installEventFilter(this);
textEdit2->installEventFilter(this); }
boolMainWindow::eventFilter(QObject*obj,QEvent*event) {
if(obj==textEdit1||obj==textEdit2){ if(event->type()==QEvent::FocusIn){
changeKeyboard(obj->property("keyboard")); } }
returnQMainWindow::eventFilter(obj,event); }
voidMainWindow::changeKeyboard(QVariantkeyboard) {
qDebug()<<keyboard.toString(); /* The following is how I did this in
Python but I am unsure how to translate this into C++. A different
approach in C++ would be okay, but it needs to be an approach I can
translate back into Python/PyQt. from Cocoa import NSTextInputContext
//This line goes at top of page with any other import statements ic =
NSTextInputContext.currentInputContext() if not ic: ic =
NSTextInputContext.new() ic.setValue_forKey_(keyboard.toString(),
'selectedKeyboardInputSource') */ }
On 19/08/2016 16:48, timur.kristof at gmail.com wrote:
> Can you create a simple example app without Python, to see if it really is Qt's fault?
>
> (Just create an app with Qt Creator and run it. As far as I understand, you use QWidgets, right? If so, create an empty QWitgets project, run and see how it goes.)
>
> On Fri Aug 19 13:33:58 2016 GMT+0200, Timothy W. Grove wrote:
>> Changing the keyboard input source on OS X back and forth between
>> 'British' and 'Myanmar-QWERTY' crashes my PyQt v5.7 application after
>> about three changes, usually corrupting an attached sqlite database as
>> well. 'Myanmar-QWERTY' is the only input source that I'm having trouble
>> with; all others that I've tested so far appear okay. The windows
>> version of the application also seems okay. My application is fairly
>> complex, but I'm seeing this issue even with an absolute minimal app
>> containing only one window. I'm not certain if the issue is with PyQt or
>> Qt or the input source itself, but it doesn't appear to be with python
>> as a Tkinter app worked okay.
>>
>> Any answers would be great, but if anyone could suggest where to find a
>> solution that would also be helpful. This is a pretty obscure bug, but
>> finding a solution or work-around is important to the application I'm
>> developing. Thank you.
>>
>> Best regards,
>> Timothy Grove
>>
>>
>> Test program:
>>
>> #!/usr/bin/env python3
>> # -*- coding: utf-8 -*-
>>
>> import sys
>> from PyQt5.QtWidgets import QMainWindow
>> from PyQt5.QtWidgets import QTextEdit
>> from PyQt5.QtWidgets import QApplication
>>
>> class MainWindow(QMainWindow):
>> def __init__(self, parent=None):
>> super(MainWindow, self).__init__(parent)
>>
>> text = QTextEdit()
>> self.setCentralWidget(text)
>>
>> if __name__ == "__main__":
>> app = QApplication(sys.argv)
>>
>> mw = MainWindow()
>> mw.show()
>>
>> sys.exit(app.exec_())
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160827/0314fea3/attachment.html>
More information about the Interest
mailing list