c++ - 在 Windows (OS) 中的 QListView 上没有正确省略
问题描述
我使用两种操作系统(windows 和 linux)和 linux(图 1)ElideRight 运行良好,但在 windows(图 2)中运行不佳。(...) 应该是“a”。
我将下面的代码用于“Eliding”。
您还需要知道,这发生在 QListView 中。
ui->geometry_list->setTextElideMode(Qt::ElideRight);
解决方案
我尝试使用以下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声称à
显示的是an而不是省略号让我有点怀疑。这可能是编码问题的征兆。然而,由于 Qt 使用 Unicode,QString
此类问题不太可能发生。(在日常业务中使用 Windows 中的 Qt 进行开发时,我从未遇到过此类问题。)
只是,出于好奇,我将(224 = ) 的Windows 1252编码与椭圆的 Unicode (U+2026) 进行了比较,UTF-8 编码:,UTF-16 编码:(LE) 或(BE)。à
0xE0
e2 80 a6
26 20
20 26
这看起来不像是错误解释的编码——至少,不明显。但是,为了解决这个问题,OP 必须提供更多信息,例如MCVE,这使得问题可重现。(因此,无论它是否在 OPs 平台上重现问题,OP 都可以使用我的 MCVE。)
我怀疑这是一个编码问题,但发生在项目文本存储在QString
s 中时。它只是暴露了损坏的项目文本的列表视图。因此,考虑到在 Linux 中检索到的字符串很可能已经采用 UTF-8 编码。如果 aQString
是从 a 分配的std::string
,则也假定为 UTF-8 编码。(QString::fromStdString())。
这在内部编码为 UTF-16 的 Windows 中有所不同,但这些 ANSI 风格的系统函数(根据当前代码页具有不同的字符值含义)仍然可用(这对于任何编码损坏总是有益的)。