У меня есть кодовая база STL, которую нужно разделить между приложением QtQuick 2.0 (графический интерфейс) и чисто STL-приложением (сервером). Интерфейс может выводить свои классы из общей кодовой базы STL, поэтому он может иметь Q_PROPERTY
s, сигналы, слоты и т. Д., Но общие структуры данных должны оставаться STL-only.Использование std :: string в QML
Я хотел бы избежать дублирования данных (std::string
->QString
и т.д.), так что я пытался использовать std::string
непосредственно в системе Q_PROPERTY
. Использование Q_DECLARE_METATYPE(std::string)
и qRegisterMetaType<std::string>();
и объявляя свойства, как:
Q_PROPERTY(QString stldata READ stldata WRITE setSTLData NOTIFY stldataChanged)
делает мой код компилируется, но QML до сих пор не любит std::string
с.
Дать текстовое поле с:
Text
{
text: myserviceinterface.stldata
}
выдаст предупреждение о том, Unable to assign std::string to QString
, в то время как добавление существующей строки QML:
Text
{
text: "text: " + myserviceinterface.stldata
}
делает управление Text
отображения странно QVariant(std::string)
.
Что я делаю неправильно?
Вы правы, я сдался. Однако наличие «QString» копии уже имеющейся «std :: string» не является идеальным решением. Это означает, что больше памяти выгружается из уже ограниченного мобильного устройства, больше вычислений при обновлении строк и т. Д. – Avio
Извините, вы не упоминали другую 'QString' копию' std :: string' как переменной-члена, я просто это себе представлял. Ну, я полагаю, что я могу просто преобразовать его каждый раз, когда интерфейс должен отображать переменную. – Avio