c++ - 列表框对齐问题

标签 c++ linux qt

interface

enter image description here

大家好,我遇到了一个问题。我有一个 ListView ,其中我正在显示从文件中检索到的项目我的文件是我的文件每行文件包含制表符分隔的条目(附加示例文件)但是当我在我的 ListView 中显示它时,项目没有出现对齐。这里是代码

void list_load(QStandardItem * root)
  {
  FILE * f;
  f=fopen("/home/cv/mod2an3run/output/mod3run/sample.txt","r");

  if(f==NULL)
    {
    printf("not open");
    root->appendRow(new QStandardItem("ash"));
    }

  QString buffer ="";
  char ch = ' ';

  while (ch!=EOF)
    {
    ch = fgetc(f);
    if(ch!='\n')
      {
      buffer = buffer+ch;
      }

    if(ch=='\n')
      {
      QString status= range(prob);
      buffer = buffer +"\t"+ status ;
      root->appendRow(new QStandardItem(buffer));
      buffer="";
      }
    } //while end

  fclose(f);
  }// func end

我附上了我的界面和示例文件,请帮助我对齐我的列表框项目

最佳答案

可能与输入流中的选项卡以及不同的字段大小有关。

如果您检查第二列比其他列更向左移动的两行,您会发现它们是相对较短的 IP 地址。虽然您的编辑器可能使用 8 位制表位和固定宽度字体,但您的列表框是不同的,特别是因为 . 分隔符在它使用的比例字体中是一个更细的字符.

同上第三列左移的行(除了已经提到的那两列)。

您可以简单地为您的列表框选择固定宽度的字体来解决这个问题。在我看来,最好 的做法是将每一行分成几列。您可以这样做,因为前两列中没有空格(是 IP 地址)。

然后,使用固定宽度的字体,将显示的每一列用空格填充到一定大小。这应该可以解决字体宽度制表位的任何问题。

例如,您的第一行可能是:

118.107.140.11<tab>66.20.151.93<tab>Wed May 18 blah blah blah

将其分成三个不同的数据项(在制表符处拆分或使用任何其他分隔符),然后将两个 IP 地址数据项分别填充到十五个字符(最大的 IPv4 是 255.255.255.255).

您还必须填充日期字段以确保您的 NON SUSPICIOUS 列对齐。

然后输出它们并在它们之间留几个空格:

118.107.140.11   66.20.151.93     Wed May 18 blah blah blah  NON SUSPICIOUS
50.56.2.200      118.107.128.235  Wed May 18 yada yada yada  SUSPICIOUS

关于c++ - 列表框对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503031/

相关文章:

c++ - 将现有的(行、列)C++ 模型与 QtQuick(网格、 TableView )一起使用

qt - 如何在 Qt Creator `.pro.shared` 文件中指定构建、部署和运行配置?

c++ - QT4内存管理

c++ - 如何将字符转换为整数

c++ - C++17 的 std::inserter 替代品

c++ - 为什么我的类(class)没有通过Qt QUDPSocket接收UDP数据报?

c++ - 在三个src文件中使用extern

linux - 我收到一个错误 httpd dead subsys locked

linux - 用于在不同终端中运行脚本中的每个命令的 Shell 脚本

regex - 使用 -f 选项的 grep 或 fgrep 没有输出不起作用