簡體   English   中英

C ++ Builder,label.caption,std :: string轉換為unicode

[英]c++ builder, label.caption, std::string to unicode conversion

只需要設置lbl.caption(在循環內),但是問題比我想象的要大。 我什至嘗試了wstrings的向量,但是沒有這種東西。 我已經閱讀了一些頁面,嘗試了一些函數,例如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錯誤] myFile.cpp(129):E2034無法將“ std :: string”轉換為“ UnicodeString”

現在吃了我幾個小時。 有沒有“快速而骯臟的”解決方案? 它只需要工作...

UPDATE

解決了。 我混合了STL / VCL字符串類。 謝謝TommyA

問題是您正在將標准模板庫字符串類VCL字符串類混合在一起。 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字符串中檢索實際的以null終止的字符指針,並將它們傳遞給標題,這時它將被轉換為VCL String類,如下所示:

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

首選哪種解決方案取決於您,但是除非您對STL字符串類有特定的需求,否則我強烈建議您使用VCL字符串類(如我在第一個示例中所示)。 這樣,您將不必具有兩個不同的字符串類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM