رفتن به مطلب
جامعهٔ برنامه‌نویسان مُدرن ایران
  • 0
نیما غراب

استفاده از دو نوع فونت در QML


سوال

سلام بر دوستان گرامی و اساتید ارجمند.

چه طوری در QML/Qt Quick میشه در یک TextArea یا دیگر اشیا مرتبط با تایپ متن، جوری تعریف شن تا وقتی کیبورد روی فارسی هست از فونت مثلا بی‌نازنین استفاده شه برای تایپ و وقتی کیبورد به زبان انگلیسی تغییر پیدا کرد از فونت مثلا تایمز نیو رومن استفاده شه؟ آیا اصلا QML یک همچین مکانیزمی رو در اختیار ما در سمت رابط کاربری قرار میده یا باید از خود C++ کمک گرفت؟

سپاس گزارم.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

7 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 2
در 7 ساعت قبل، نیما غراب گفته است :

@کامبیز اسدزاده دستتون درد نکنه خیلی ممنونم.

خب مشکل من الان همین isLatin هست که نمیدونم چه طوری باید در زمان اجرا با توجه به اینکه کاربر، کیبوردش رو روی چی گذاشته باشه تغییرش بدم!

رویدادی یا سیگنالی برای اینکار وجود نداره که مثلا هروقت کاربر زبان تایپ رو عوض کرد بشه ازش مطلع شد و نوعشم فهمید؟

سمت سی‌پلاس‌پلاس کدی تدارک ببینید که وضعیت لایهٔ زبانی روی صفحه‌کلید رو بررسی و به سمت کیو‌ام‌ال پاس بده.

در آخرین تغییراتِ کیوت، از کدی مشابه زیر می‌تونید استفاده و روش مورد نظر خودتون رو پیاده کنید:

 QGuiApplication app(argc, argv);
 QLocale locale;
 app.inputMethod()->locale().setDefault(QLocale::English);
 qDebug() << app.inputMethod()->locale().language();

مقداری که چاپ می‌شه رو در یک روش بهتر در قالب کلاس و تابعی مشتق شده از QObject به سمت QML پاس بدین.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 1
در 4 دقیقه قبل، نیما غراب گفته است :

سلام بر دوستان گرامی و اساتید ارجمند.

چه طوری در QML/Qt Quick میشه در یک TextArea یا دیگر اشیا مرتبط با تایپ متن، جوری تعریف شن تا وقتی کیبورد روی فارسی هست از فونت مثلا بی‌نازنین استفاده شه برای تایپ و وقتی کیبورد به زبان انگلیسی تغییر پیدا کرد از فونت مثلا تایمز نیو رومن استفاده شه؟ آیا اصلا QML یک همچین مکانیزمی رو در اختیار ما در سمت رابط کاربری قرار میده یا باید از خود C++ کمک گرفت؟

سپاس گزارم.

درود،
دو تا سیستم فونت تعریف کنید، یکیش لاتین برای انگلیسی و دیگری فونت مورد نظر برای فارسی. برای مثال، همچین چیزی رو در نظر داشته باشید:


    FontLoader {
        id: fontEnglish
        source: "english-font.ttf"
    }
    
    FontLoader {
        id: fontPersian
        source: "persian-font.ttf"
    }

در نهایت در یک دستور شرطی با توجه به واکنش بر اساس مشخصهٔ فکوس و یا هر چیزی که نیاز هست فونت‌ها رو اعمال کنید. برای مثال به صورت زیر:

    TextField {
        //Todo...
        property bool isLatin : false
        font.family: isLatin ? fontEnglish.name : fontPersian.name 
        onPlaceholderTextChanged: {
          //ToDo...
        }
    }

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 1
در 14 دقیقه قبل، نیما غراب گفته است :

@کامبیز اسدزاده

آقا کامبیز اگر بخوایم همزمان دو یا هر چند نوع فونتی که بخوایم رو در یک TextFieldیا TextInputیا... داشته باشیم باید چه کنیم؟

تغییر خاصیت font.family باعث میشه فونت کل متن باهم عوض شه در حالی که چیزی که مد نظر منه این هست که هرچی کارکتر فارسی هست فونتشون مثلا بی نازنین باشه و هرچی انگلیسی هست تایمز نیو رومن منتهی در یک TextFieldیا TextInputیا...

الان با localeمیشه تشخیص داد کارکتر وارد شده انگلیسی هست یا فارسی ولی نمیدونم چه طوری باید همزمان روی یک متن دو یا چند نوع فونت رو اعمال کرد!

سپاس گزارم.

سادست، کافیه یک دستور شرطی ساده براش در نظر بگیری، مثل نمونهٔ زیر:

property bool isLatin : false
..
...
....

Text {
  font.family: isLatin ? fontSystem.getEnglishFont.name : fontSystem.getPersianFont.name
  ..
  ....
}

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 1
در 6 دقیقه قبل، نیما غراب گفته است :

@کامبیز اسدزاده

دستتون درد نکنه خیلی ممنونم. این کدی که گفتین نتیجه عکسی میشه که پیوست کردم؟

مستطیل سبز یک Field هست که همزمان از دو نوع فونت برای نمایش متن استفاده شده فارسی بی نازنین هست و انگلیسیش تایمز نیو رومن.

595117642_MultipleTextinSameField.jpg.a31aba1b367edc7a722ccc16fb7e4766.jpg

من مشابه این کدی که گفتین رو نوشتم ولی فونت کل متن باهم تغییر میکنه!

خب فونت کل متن تغییر خواهد کرد! و این روش درستی هست. اما اگر می‌خواهید در بحث درون‌خط متنی که نوشتی یعنی «سلام بر World در زبان ++C» متن فارسی جدا و انگلیسی جدا تغییر کنند باید به فکر فونت فارسی باشی که داخلش از لاتین‌های سفارشی استفاده می‌کنه. مثل صمیم، ساحل و یا فونت‌های تجاری دیگر.

در این صورت هم نیاز نیست دو تا فونت معرفی کنی، همون یک مدل کافی هست، به شرطی که از فونت لاتین استفاده کند.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

@کامبیز اسدزاده دستتون درد نکنه خیلی ممنونم.

خب مشکل من الان همین isLatin هست که نمیدونم چه طوری باید در زمان اجرا با توجه به اینکه کاربر، کیبوردش رو روی چی گذاشته باشه تغییرش بدم!

رویدادی یا سیگنالی برای اینکار وجود نداره که مثلا هروقت کاربر زبان تایپ رو عوض کرد بشه ازش مطلع شد و نوعشم فهمید؟

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
ارسال شده در (ویرایش شده)

@کامبیز اسدزاده

آقا کامبیز اگر بخوایم همزمان دو یا هر چند نوع فونتی که بخوایم رو در یک TextFieldیا TextInputیا... داشته باشیم باید چه کنیم؟

تغییر خاصیت font.family باعث میشه فونت کل متن باهم عوض شه در حالی که چیزی که مد نظر منه این هست که هرچی کارکتر فارسی هست فونتشون مثلا بی نازنین باشه و هرچی انگلیسی هست تایمز نیو رومن منتهی در یک TextFieldیا TextInputیا...

الان با localeمیشه تشخیص داد کارکتر وارد شده انگلیسی هست یا فارسی ولی نمیدونم چه طوری باید همزمان روی یک متن دو یا چند نوع فونت رو اعمال کرد!

سپاس گزارم.

ویرایش شده در توسط نیما غراب

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

@کامبیز اسدزاده

دستتون درد نکنه خیلی ممنونم. این کدی که گفتین نتیجه عکسی میشه که پیوست کردم؟

مستطیل سبز یک Field هست که همزمان از دو نوع فونت برای نمایش متن استفاده شده فارسی بی نازنین هست و انگلیسیش تایمز نیو رومن.

595117642_MultipleTextinSameField.jpg.a31aba1b367edc7a722ccc16fb7e4766.jpg

من مشابه این کدی که گفتین رو نوشتم ولی فونت کل متن باهم تغییر میکنه!

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...