How to add third party plug in qt ?
-
i want to use Florence keyboard in qt . How to link this plug in in my qt project. i have implemented the code but that not take the input. i am clicking on it but it not take the input.
i think i am missing some thing to add in project . i can see that keyboard on screen but actually when i am clicking on it it not take the input.
How to resolve this issue ?
Actually on linux pc it works. But same code when i execute on development board with touchscreen. i face above issue.
-
Current Qt versions is Qt 5.15.2 for OpenSource for the Qt 5 series and 6.2 is around the corner for the Qt 6 series.
Qt 5.5.1 was released in September 2015 so that 6 years ago. Therefore it's not a good idea to start a new project with it.
As for Yocto, you should read the project description.
-
Hi,
What did you write that works on your desktop ?
-
@SGaist i have installed florence keyboard on my target device.
on pc my on_lineEdit_Title_textChanged slot get called when i click on virtual keyboard key. But on target device it not take input.
i have written below code :
#include "main_keyboard.h" #include "ui_main_keyboard.h" #define KEYBOARD_CMD "florence" #define SPLITTER_START_Y 310 Main_keyboard::Main_keyboard(QWidget *parent, MainKeyboardType eMainKeyboardType , UINT8 u8StringLimit, QString sDisplayData) : QWidget(parent), ui(new Ui::Main_keyboard) { ui->setupUi(this); FUNCTION_IN; eLangWhileKayboardOpen = (LanguageItem)pMainApp.ObjStationInfo.sCurrentLanguage.toUInt(); if(eLangWhileKayboardOpen == LAN_ENGLISH) { /* Design keyboard dynamically */ AddKeyBoardButton(); } else { bIsVirtualKeyboardOpen = false; //Delete Keyframe and removed two buttons delete(ui->frame); ui->splitter->setGeometry(QRect(56,SPLITTER_START_Y,368,80)); ui->lineEdit_Title->setGeometry(QRect(56, SPLITTER_START_Y-45,368,45)); ui->Label_Main->setGeometry(56, SPLITTER_START_Y-45-70, 365, 70); ui->pushButton_Exit->setGeometry(388, SPLITTER_START_Y-45-70-45+11, 70, 70); delete(ui->pushButton_Backspace); delete(ui->pushButton_Caps); ui->pushButton_Save->setFixedWidth(368); OpenVirtualKeyboard(); if(bIsVirtualKeyboardOpen) { ChangeKeyboardLanguage(eLangWhileKayboardOpen); } } QFont font; font.setFamily(FONT_FAMILY_AWESOME); font.setPixelSize(BACK_BUTTON_FONTSIZE); //ui->pushButton_Exit->setFont(font); //ui->pushButton_Exit->setText(CLEAR_BUTTON_FONT); ui->pushButton_Save->setEnabled(false); sTypedData = sDisplayData; ui->lineEdit_Title->setFocus(); ui->lineEdit_Title->setText (sTypedData); ui->lineEdit_Title->setCursorPosition(sTypedData.length()); eReceivedMainKeyboardType = eMainKeyboardType; bCapsOn = false; switch(eMainKeyboardType) { case KEYBOARD_USER_NAME: { ui->pushButton_Save->setStyleSheet(SAVEBUTTONSytesheetEnable); ui->Label_Main->setText((sEnterName())); // "ENTER NAME"); if(eLangWhileKayboardOpen == LAN_ENGLISH) { SetLowercaseButton(); keyButton[ZERO_KEY_INDEX]->hide(); } } break; case KEYBOARD_WIFI_PASSWORD: { ui->pushButton_Save->setStyleSheet(ENTERBUTTONStylesheet); ui->Label_Main->setText((sEnterPassword())); // "ENTER PASSWORD"); if(eLangWhileKayboardOpen == LAN_ENGLISH) SetLowercaseButton(); } break; case KEYBOARD_LOT_NUMBER: { ui->pushButton_Save->setStyleSheet(ENTERBUTTONStylesheet); ui->Label_Main->setText(sEnterLotNumber()); //"ENTER LOT NUMBER"); if(eLangWhileKayboardOpen == LAN_ENGLISH) SetLowercaseButton(); } break; case KEYBOARD_PART_NUMBER: { ui->pushButton_Save->setStyleSheet(ENTERBUTTONStylesheet); ui->Label_Main->setText(sEnterPartNumber()); //"ENTER PART NUMBER"); if(eLangWhileKayboardOpen == LAN_ENGLISH) SetLowercaseButton(); } break; case MAX_MAIN_KEYBOARD: default: break; } u8WordLimit = u8StringLimit; FUNCTION_OUT; } Main_keyboard::~Main_keyboard() { if(eLangWhileKayboardOpen != LAN_ENGLISH) CloseVirtualKeyboard(); delete ui; } void Main_keyboard::AddKeyBoardButton() { FUNCTION_IN; UINT8 u8MenuItemIndex, u8RowIndex, u8ColumnIndex; QGridLayout *controlsLayout = new QGridLayout; for(u8MenuItemIndex = 0; u8MenuItemIndex < MAX_KEY; u8MenuItemIndex++) { u8RowIndex = u8MenuItemIndex / KEYS_PER_ROW; u8ColumnIndex = u8MenuItemIndex % KEYS_PER_ROW; //Add PushButton keyButton[u8MenuItemIndex] = new QPushButton(); keyButton[u8MenuItemIndex]->setObjectName(QString::number(u8MenuItemIndex)); keyButton[u8MenuItemIndex]->setMinimumHeight(KEYBOARD_BUTTON_HEIGHT); keyButton[u8MenuItemIndex]->setMinimumWidth(KEYBOARD_BUTTON_WIDTH); keyButton[u8MenuItemIndex]->setFlat(true); keyButton[u8MenuItemIndex]->setStyleSheet ("border: 0px solid black;font-family:'Open Sans';font-weight:600;font-size:12pt;"); QObject::connect(keyButton[u8MenuItemIndex], &QPushButton::released, this, &Main_keyboard::onKeyRelease); //Add Pushbutton in GridLayout controlsLayout-> addWidget(keyButton[u8MenuItemIndex], u8RowIndex, u8ColumnIndex, 1, 1, Qt::AlignCenter); } controlsLayout->setMargin(0); controlsLayout->setHorizontalSpacing(0); controlsLayout->setVerticalSpacing(0); ui->verticalLayout->addLayout(controlsLayout); FUNCTION_OUT; } void Main_keyboard::SetUppercaseButton() { ui->pushButton_Caps->setStyleSheet(CAPS_LOCK_ON_COLOR); bCapsOn = true; if(eLangWhileKayboardOpen == LAN_ENGLISH) { for(UINT8 u8ButtonIndex = 0; u8ButtonIndex < MAX_KEY; u8ButtonIndex++) { keyButton[u8ButtonIndex]->setText(sUpperKey[u8ButtonIndex]); } } } void Main_keyboard::SetLowercaseButton() { ui->pushButton_Caps->setStyleSheet(CAPS_LOCK_OFF_COLOR); bCapsOn = false; if(eLangWhileKayboardOpen == LAN_ENGLISH) { for(UINT8 u8ButtonIndex = 0; u8ButtonIndex < MAX_KEY; u8ButtonIndex++) { keyButton[u8ButtonIndex]->setText(sLowerKey[u8ButtonIndex]); } } } void Main_keyboard::onKeyRelease() { QObject *senderObj = sender(); QString senderObjName = senderObj->objectName(); u_int8_t u8MenuItemIndex = senderObjName.toInt(); if(u8MenuItemIndex == SPACE_KEY_INDEX) { GetEntry(" "); } else { GetEntry(keyButton[u8MenuItemIndex]->text()); } } void Main_keyboard::GetEntry(QString get_char) { if(sTypedData.length() < u8WordLimit) { u8CursorPosition = ui->lineEdit_Title->cursorPosition(); sTypedData.insert(u8CursorPosition , get_char.at(0)); ui->lineEdit_Title->setText (sTypedData); ui->lineEdit_Title->setCursorPosition(++u8CursorPosition); } } void Main_keyboard::on_lineEdit_Title_textChanged(const QString &arg1) { #ifdef QDEBUG_ENABLE pMainApp.ObjStationInfo.DebugStation("Text Changed: " + arg1 + "length" + sTypedData.length()); #endif sTypedData= arg1; if(sTypedData.isEmpty()) ui->pushButton_Save->setEnabled(false); else ui->pushButton_Save->setEnabled(true); if(sTypedData.length() > u8WordLimit) { u8CursorPosition = ui->lineEdit_Title->cursorPosition(); sTypedData.remove(u8CursorPosition ,1); ui->lineEdit_Title->setText (sTypedData); ui->lineEdit_Title->setCursorPosition(--u8CursorPosition); } ui->lineEdit_Title->repaint(); } void Main_keyboard::on_pushButton_Caps_released() { //border: 3px solid black;background:rgb(0, 85, 127);color: rgb(255, 255, 255); //white //border: 3px solid black;background:rgb(0, 85, 127);color: rgb(0, 0, 0); //black if(eLangWhileKayboardOpen == LAN_ENGLISH) { if(bCapsOn ==false) { SetUppercaseButton(); } else { SetLowercaseButton(); } } } void Main_keyboard::on_pushButton_Backspace_released() { if(eLangWhileKayboardOpen == LAN_ENGLISH) { if(sTypedData.length()>0) { u8CursorPosition = ui->lineEdit_Title->cursorPosition(); sTypedData.remove(--u8CursorPosition , 1); ui->lineEdit_Title->setText (sTypedData); ui->lineEdit_Title->setCursorPosition(u8CursorPosition); } } } void Main_keyboard::on_pushButton_Exit_released() { CloseVirtualKeyboard(); this->close(); delete this; } void Main_keyboard::on_pushButton_Save_released() { qApp->setOverrideCursor(QCursor( Qt::WaitCursor)); switch(eReceivedMainKeyboardType) { case KEYBOARD_USER_NAME: break; case KEYBOARD_WIFI_PASSWORD: { Network_Setting* parent = qobject_cast<Network_Setting*>(this->parent()); parent->SaveConnectNetWork(parent->sSelectedSsid ,sTypedData, "1", true); } break; case KEYBOARD_LOT_NUMBER: { Cal_Gas_Information* parent = qobject_cast<Cal_Gas_Information*>(this->parent()); parent->DisplayLotNumber(sTypedData); } break; case KEYBOARD_PART_NUMBER: { Cal_Gas_Information* parent = qobject_cast<Cal_Gas_Information*>(this->parent()); parent->DisplayPartNumber(sTypedData); } break; case MAX_MAIN_KEYBOARD: default: break; } #ifdef BOARD_APP qApp->setOverrideCursor(QCursor( Qt::BlankCursor)); #else qApp->setOverrideCursor(QCursor(Qt::ArrowCursor)); #endif if(eLangWhileKayboardOpen != LAN_ENGLISH) CloseVirtualKeyboard(); this->close(); delete this; } //void Main_keyboard::on_pushButton_Clear_released() //{ // sTypedData.clear(); // ui->lineEdit_Title->clear(); //} void Main_keyboard::on_lineEdit_Title_cursorPositionChanged(int , int ) { if(eLangWhileKayboardOpen != LAN_ENGLISH) { if(bIsVirtualKeyboardOpen == false) { OpenVirtualKeyboard(); ChangeKeyboardLanguage((LanguageItem)pMainApp.ObjStationInfo.sCurrentLanguage.toUInt()); } } } void Main_keyboard::ChangeKeyboardLanguage(LanguageItem eLanguageItem) { QString sResponse, sError; bool bIsCmdFailed = false; QString sLocale; switch(eLanguageItem) { case LAN_ENGLISH: case MAX_LANGUAGE: default: sLocale = "us"; break; case LAN_TURKISH: sLocale = "tr"; break; } QString sKeyLanChangeCmd = QString("%1 %2").arg("setxkbmap", sLocale); do { bIsCmdFailed = pMainApp.ObjSysOperation.SendSystemCommand(sKeyLanChangeCmd, sResponse, sError); if(bIsCmdFailed) { AppLog::AddLog(LOG_ERROR, __FUNCTION__, __LINE__, "Failed to set Language"); #ifdef QDEBUG_ENABLE pMainApp.ObjStationInfo.DebugStation("Failed to set Language"); #endif break; } else { } }while(false); } void Main_keyboard::OpenVirtualKeyboard() { QString sResponse, sError; bool bIsCmdFailed = false; do { if(!bIsVirtualKeyboardOpen) { //bIsCmdFailed = SendSystemCommand(KEYBOARD_CMD" &", sResponse, sError); bIsCmdFailed = pMainApp.ObjSysOperation.SendSystemCommand("florence -u /usr/share/florence/florence.conf &", sResponse, sError); if(bIsCmdFailed) { AppLog::AddLog(LOG_ERROR, __FUNCTION__, __LINE__, "Failed to open florence keyboard"); #ifdef QDEBUG_ENABLE pMainApp.ObjStationInfo.DebugStation("Failed to open florence keyboard"); #endif break; } else { bIsVirtualKeyboardOpen = true; } } }while(false); } void Main_keyboard::CloseVirtualKeyboard() { ChangeKeyboardLanguage(LAN_ENGLISH); QString sResponse, sError; pMainApp.ObjSysOperation.SendSystemCommand("pkill "KEYBOARD_CMD, sResponse, sError); bIsVirtualKeyboardOpen = false; }
-
Are you sure that that keyboard is working properly on your target ?
By the way, did you consider Qt's own Virtual Keyboard module ? -
@SGaist it get open but not take i/p.
Why it just get open but not take i/p?
Yes I started to use qt keyboard. But i am not much more about it.
What library I need to install on linux? How to use it?
How I can add it on my existing program with minimum steps?
Note that i want virtual keyboard to use on qt c++ based. Not on qt qml based.
Thanks for reply
-
Can you give more information about that Florence keyboard ?
Some documentation link, sources, etc ? -
As for C++, did you try to simply use it with a minimal widget application ?
-
@SGaist to use qt virtual keyboard
What library I need to install on linux? How to use it?
How I can add it on my existing program with minimum steps?
Note that i want virtual keyboard to use on qt c++ based. Not on qt qml based.
-
@SGaist link for Florence keyboard
http://florence.sourceforge.net/english.html
I have installed it on pc. On pc my code is working fine but on target device it is not working
-
@Qt-embedded-developer said in How to add third party plug in qt ?:
@SGaist to use qt virtual keyboard
What library I need to install on linux? How to use it?
How I can add it on my existing program with minimum steps?
Note that i want virtual keyboard to use on qt c++ based. Not on qt qml based.
Did you read the documentation page I linked ? The one that explains the module, provides a link to installation / build instructions, etc ?
-
@SGaist Can i use it on Qt version 5.5.1 as open source code?
I have already installed qt on my linux pc. How to install packages related to virtual keyboard on my pc? From where i can find qt maintenance tool on linux ?
-
@Qt-embedded-developer said in How to add third party plug in qt ?:
From where i can find qt maintenance tool on linux ?
Install Qt using Qt Online Installer, then you will also get maintenance tool.
-
Then use something more recent to run in your board. Qt 5.5 is more than 10 minor releases behind. Yocto comes to mind for example.
-
Current Qt versions is Qt 5.15.2 for OpenSource for the Qt 5 series and 6.2 is around the corner for the Qt 6 series.
Qt 5.5.1 was released in September 2015 so that 6 years ago. Therefore it's not a good idea to start a new project with it.
As for Yocto, you should read the project description.