سلام
میخواهم یک آموزش برای برطرف کردن این مشکل در QTextEdit بدهم.
برای اینکه ما یک QTextEdit داشته باشیم که توانایی درج نویسه فاصلهٔ مجازی ( ZWNJ ) را داشته باشد، میتوانیم از یک کلاس به اسم MyQTextEdit استفاده کنیم به این صورت که کلاس MyQTextEdit از کلاس QTextEdit ارثبری بکند تا ویژگیهای کلاس QTextEdit به کلاس MyQTextEdit منتقل شود. حالا ما یک کلاس به اسم MyQTextEdit داریم که کاملاً شبیه به QTextEdit هستش. اکنون درون کلاس MyQTextEdit یک تابع بسازید و قابلیت درج فاصلهٔ مجازی را به آن اضافه کنید. بعداً در برنامه اصلیتان میتوانید بجای استفاده مستقیم از QTextEdit از MyQTextEdit استفاده کنید که دارای قابلیت درج نویسهٔ فاصلهٔ مجازی نیز هست.
#include <QApplication>
#include <QKeyEvent>
#include <QTextEdit>
class MyQTextEdit : public QTextEdit
{
public:
void keyPressEvent(QKeyEvent *e)
{
QTextEdit::keyPressEvent(e);
if( e->key() == 0x200c )
{
insertPlainText( QChar(0x200C) );
}
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyQTextEdit *edit = new MyQTextEdit();
edit->show();
return a.exec();
}
منبع:
https://stackoverflow.com/questions/24710704/override-keyboard-map-in-qt-applicationنمونهای از خروجی در زیر نمایش داده شده:
اگر میخواهید کلاس MyQTextEdit شما هم از فاصلهٔ مجازی ( ZWNJ ) و هم از اتصال مجازی ( ZWJ ) پشتیبانی کند از کد زیر استفاده کنید:
#include <QApplication>
#include <QKeyEvent>
#include <QTextEdit>
class MyQTextEdit : public QTextEdit
{
public:
void keyPressEvent(QKeyEvent *e)
{
QTextEdit::keyPressEvent(e);
if( e->key() == 0x200c )
{
insertPlainText( QChar(0x200C) );
}
else if ( e->key() == 0x200D )
{
insertPlainText( QChar(0x200D ) );
}
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyQTextEdit *edit = new MyQTextEdit();
edit->setFont( QFont( "Sans Regular", 18));
edit->show();
return a.exec();
}
این هم یک نمونه از اجرا: ( با دستور زیر اندازه قلم را افزایش دادم تا در عکس زیر راحتتر دیده شود )
edit->setFont( QFont( "Sans Regular", 18));