我尝试使用以下 MCVE testQListViewElide.cc 重现 OPs 问题:
// Qt header:
#include <QtWidgets>
// main application
int main(int argc, char **argv)
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
QApplication app(argc, argv);
// setup GUI
QListWidget qLst;
qLst.resize(200, 200);
qLst.setTextElideMode(Qt::ElideRight);
qLst.addItem(QString("A very long item text to make the elide feature visible"));
qLst.show();
// runtime loop
return app.exec();
}
我的平台是 Windows 10 上的 Visual Studio 2019。
输出:
Qt Version: 5.15.1
实际上没有省略号。但是……请注意水平滚动条。
所以,我添加了一行来关闭滚动条:
qLst.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
输出:
所以,这通常适用于 Windows。 (如果没有,我会感到惊讶。)
OP声称显示à而不是省略号让我有点怀疑。这可能是编码问题的征兆。但是,由于 Qt 在 QString 中使用 Unicode,因此不太可能出现此类问题。 (我在日常业务中使用 Windows 中的 Qt 进行开发时从未遇到过此类问题。)
出于好奇,我将à (224 = 0xE0) 的Windows 1252 编码与椭圆的Unicode (U+2026) 进行了比较,采用UTF-8 编码:e2 80 a6,采用UTF -16 编码:26 20 (LE) 或 20 26 (BE)。
这看起来不像是错误解释的编码——至少,不明显。但是,为了解决这个问题,OP 必须提供更多信息,例如MCVE 使问题可重现。
(因此,无论是否在 OPs 平台上重现问题,OP 都可以使用我的 MCVE。)
我怀疑这是一个编码问题,但在项目文本存储在QStrings 时发生。它只是暴露了损坏的项目文本的列表视图。因此,考虑到在 Linux 中检索到的字符串很可能已经采用 UTF-8 编码。如果从std::string 分配QString,则也假定为UTF-8 编码。 (QString::fromStdString())。
这在内部编码为 UTF-16 的 Windows 中有所不同,但这些 ANSI 风格的系统函数(根据当前代码页具有不同的字符值含义)仍然可用(对于任何编码损坏总是有益的)。