c++生成器,标签.标题,标准::字符串到unicode转换

jrcvhitl  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(154)

只需要设置lbl.caption(在一个循环中),但问题比我想象的要大。我甚至尝试了wstring的向量,但没有这样的事情。我读了一些页面,尝试了一些函数,如WideString(),UnicodeString(),我知道我不能也不应该在C++ Builder 2010中关闭Unicode。

std::vector <std::string> myStringVec(20, "");
myStringVec.at(0) = "SomeText";
std::string s = "something";

// this works ..
Form2->lblTxtPytanie1->Caption = "someSimpleText";

// both lines gives the same err
Form2->lblTxtPytanie1->Caption = myStringVec.at(0);
Form2->lblTxtPytanie1->Caption = s;

错误:[BCC32错误]我的文件. cpp(129):E2034无法将"标准字符串"转换为"Unicode字符串"
它现在吃了我几个小时了。有没有什么"又快又脏"的解决办法?它只需要工作...

    • 更新**

解决了。我混合了STL/VCL字符串类。谢谢你TommyA

cqoc49vn

cqoc49vn1#

问题是你把standard template library string classVCL string class混在一起了。caption属性需要的是VCL字符串,它具有STL字符串的所有功能。
这个例子实际上是传递(const char*),这很好,因为在VCL UnicodeString类构造函数中有一个用于此的构造函数,但是没有用于从STL字符串复制的构造函数。
你可以做两件事中的一件,你可以在你的向量中使用一个VCL字符串类而不是STL类,这样:

std::vector <std::string> myStringVec(20, "");
myStringVec.at(0) = "SomeText";
std::string s = "something";

变成:

std::vector <String> myStringVec(20, "");
myStringVec.at(0) = "SomeText";
String s = "something";

在这种情况下,下面两行也可以工作。或者,您可以从STL字符串中检索实际的空终止字符指针,并将其传递给标题,此时它将被转换为一个VCL String类,如下所示:

// both lines will now work
Form2->lblTxtPytanie1->Caption = myStringVec.at(0).c_str();
Form2->lblTxtPytanie1->Caption = s.c_str();

您喜欢哪种解决方案取决于您自己,但是除非您对STL字符串类有特定的需求,否则我强烈建议您使用VCL字符串类(如我在第一个示例中所示)。

相关问题