【问题标题】:Not eliding correctly on QListView in Windows (OS)在 Windows (OS) 中的 QListView 上没有正确省略
【发布时间】:2021-11-19 10:32:21
【问题描述】:

我使用两种操作系统(windows 和 linux)和 linux(图 1)ElideRight 运行良好,但在 windows(图 2)中运行不佳。 (...) 应该是 "a"。

我将下面的代码用于“Eliding”。

你还需要知道,这发生在 QListView 中。

ui->geometry_list->setTextElideMode(Qt::ElideRight);

【问题讨论】:

    标签: c++ qt user-interface


    【解决方案1】:

    我尝试使用以下 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 风格的系统函数(根据当前代码页具有不同的字符值含义)仍然可用(对于任何编码损坏总是有益的)。

    【讨论】:

    • @BatuhanCENGIZ 请问您的实际问题是什么? (只是出于好奇。我在想一段时间 WTH 可能发生在你身边......);-)
    • 我正在为一家公司工作,这在 5-6 天前作为一个错误出现在我面前,我尝试了很多方法但没有找到解决方案。所以决定在这里写。这就是全部情况:)
    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多