They can be used together.
C++ has a long history and the STL implementation and support have evolved with the language. I think that the ex-Trolltech team decided that they didn't have enough control over the quality and availability of STL implementations to make the Qt library depend on it. The result is that Qt has its own QTL, QtAlgorithms header and QString.
They have taken care to make them compatible with the STL:
- most containers have a similar interface to the STL ones (e.g: iterator access, push_back(), empty(), etc)
- Qt containers can be converted to/from STL containers (e.g: QVector::toStdVector, QList::fromStdList)
- Qt containers can be used with STL algorithms
- QString can be converted to/from std::string and std::wstring with toStd(W)String / fromStd(W)String
Personally, I like QString more than std::string, it is easier to use and more powerful.