Russian Qt Forum

Qt => Qt Quick => Тема начата: ksk- от Август 09, 2015, 15:12



Название: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: ksk- от Август 09, 2015, 15:12
Всем привет! На некоторых компонентах из QtQuick.Controls (в частности "Button" и "MenuItem") некорректно отображается текст, содержащий символы "&". Очень не хотелось бы только из-за этого делать стили для таких компонентов. Я надеялся использовать системный.

Видимо, это баг? Или так и задумано? Может быть, есть какое-нибудь быстрое и простое решение?

Ниже код и картинка:
Код
Javascript
import QtQuick 2.5
import QtQuick.Controls 1.4
 
Rectangle {
   width: 200;
   height: 200;
 
   Column {
       anchors.fill: parent;
       anchors.margins: 2;
 
       spacing: 2;
 
       Label {
           text: "Black & White";
       }
 
       Button {
           text: "Black & White";
 
           menu: Menu {
               MenuItem { text: "Black & White" }
           }
       }
   }
}


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: Пантер от Август 10, 2015, 08:57
& в QAction используется для определения вызова по Alt + буква. Погугли, как ее сэкранировать.


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: ksk- от Август 10, 2015, 09:22
& в QAction используется для определения вызова по Alt + буква. Погугли, как ее сэкранировать.

Да, точно! Теперь всё ясно. И как я сразу не догнал? )))) Спасибо. )


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: Пантер от Август 10, 2015, 09:30
Как найдешь решение, сюда закинь. А то я подзабыл, как его экранировать. Да и мало ли, кто еще искать будет.


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: BuRn от Август 10, 2015, 10:01
Кодом символа не прокатит ?


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: Пантер от Август 10, 2015, 10:03
Покатит, но что-то проще было. Возможно, "&&"


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: ksk- от Август 10, 2015, 21:39
Покатит, но что-то проще было. Возможно, "&&"
Действительно! Это то, что нужно. Обрабатываю текст для отображения на таких контролах с помощью функции:
Код
Javascript
function menuItemText(text) {
   return text.replace(new RegExp("&", 'g'), "&&");
}


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: Пантер от Август 10, 2015, 21:49
А зачем тут регексп? Это как из пушки по воробьям. Просто пробегись по строке и сделай замену. Хотя, для qml это не очень критично. )))


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: ksk- от Август 10, 2015, 21:55
А зачем тут регексп? Это как из пушки по воробьям. Просто пробегись по строке и сделай замену. Хотя, для qml это не очень критично. )))
Это самый наглядный рабочий способ. )


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: Пантер от Август 10, 2015, 21:58
Ну, про самый и наглядный я бы поспорил. Если не лень будет завтра, попробую покрутить.


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: Пантер от Август 11, 2015, 10:25
А почему не просто:
Код
function menuItemText(text) {
   return text.replace("&", "&&");
}
 

???


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: ksk- от Август 11, 2015, 10:56
Просто replace заменит только первую найденную подстроку.


Название: Re: Отображение символа "&" на некоторых компонентах QtQuick.Controls.
Отправлено: Пантер от Август 11, 2015, 11:03
Да, точно, 2 вхождения я и не проверил. Тогда твой вариант действительно самый наглядный.