ورود

View Full Version : آموزش: اضافه کردن قابلیت درج فاصلهٔ مجازی و اتصال مجازی در QTextEdit ( در Qt 5.6 )



علی بهمنی جلالی
یک شنبه 11 مهر 1395, 17:17 عصر
سلام
برای اینکه ما یک 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

نمونه‌ای از خروجی در زیر نمایش داده شده:

142854

اگر می‌خواهید کلاس 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));


142867