で2 QStringsを連結:+
私は(つまり、directory
は:/karim/pic5.jpg
でなければならない)、文字列と整数を連結することを意味しますは++ Qtの使用して、私はCでこのような何かをしたい整数
int i = 5;
QString directory = ":/karim/pic" + i + ".jpg";
。これどうやってするの?
で2 QStringsを連結:+
私は(つまり、directory
は:/karim/pic5.jpg
でなければならない)、文字列と整数を連結することを意味しますは++ Qtの使用して、私はCでこのような何かをしたい整数
int i = 5;
QString directory = ":/karim/pic" + i + ".jpg";
。これどうやってするの?
このようなことのためにQtのイディオムはQStringののarg()
機能です。
QString directory = QString(":/karim/pic%1.jpg").arg(i);
コンパイル時に生成される 'QStringLiteral(":/ karim/pic%1.jpg ")。arg(i);'が少し良いです。 https://woboq.com/blog/qstringliteral.html – Robin
#include <sstream>
#include <string>
int i = 5;
std::stringstream s;
s << ":/karim/pic" << i << ".jpg";
std::string directory = s.str();
私はそれが 's.str()'だと思います。 's.string()'ではなく –
あなたが正しいと思っています。 –
私の編集人を確認してください –
:これは非常によく似たワンライナーはC++11を使用して行うことができます
(EDIT。これはQStringの言及編集前の質問への答えであるQStringのために、the newer answerを参照してください):
int i = 5;
std::string directory = ":/karim/pic" + std::to_string(i) + ".jpg";
テスト:古いコンパイラでhttps://ideone.com/jIAxE
、それはBoostで置換することができます:
int i = 5;
std::string directory = ":/karim/pic" + boost::lexical_cast<std::string>(i) + ".jpg";
しかし、それを行うには、古典的な方法は、文字列ストリームオブジェクトです。
int i = 5;
std::ostringstream oss;
oss << ":/karim/pic" << i << ".jpg";
std::string directory = oss.str();
面白いです。私は今まで、 'operator +(const char *、const std :: string&)'のオーバーロードがあったので、文字列コンストラクタで常にリテラルをラップする必要があることを知りませんでした。 –
私の編集者を確認してください –
@Karim M. El Tel:Ohh、それはQString(編集後)なので、ヘキサのコメントに行ってください。うまくいけば、それは再開されるので、回答として投稿することができます。 – Cubbi
はにstringstreamを見てください:
http://cplusplus.com/reference/iostream/stringstream/
ostringstream oss(ostringstream::out);
oss << ":/karim/pic";
oss << i
oss << ".jpg";
cout << oss.str();
私は何を含めるべきですか? –
私の編集者を確認してください –
C++ CONCATENATE文字列とint型http://stackoverflow.com/questions/191757/c-concatenate-string-and-int そこにそれを行うための8通りと答えがあります。 – Vache
タグは彼が 'qt'の答えを望んでいることを示しています、" duplicate "の回答はそれを提供しません。 –
私の編集者を確認してください –