列表框对齐问题

时间:2011-06-28 07:27:06

标签: c++ linux qt

interface

enter image description here

你好每个人我都面临着一个问题。我有一个列表视图,其中我显示从文件中检索到的项目我的文件是我的文件每行文件包含选项卡分隔的条目(附加样本文件)但当我在列表视图中显示它时,项目没有显示align.here是代码

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

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

2 个答案:

答案 0 :(得分:3)

可能与输入流中的标签一起使用,并结合不同的字段大小。

如果检查第二列比其他列更左侧移动的两行,您将看到它们的IP地址相对较短。虽然您的编辑器可能正在使用8和固定宽度字体的tabstop,但您的列表框却不同,尤其是,因为.分隔符是它使用的比例字体中的较薄字符。

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

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

然后,使用固定宽度字体,将每个列填充到一定大小的空格。这应解决字体宽度 tabstops的任何问题。

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

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

答案 1 :(得分:1)

您应该使用带有4列的QTableView而不是QListview。您应该在优秀的Qt帮助系统中查找以下类和函数:

  • QTextStream
  • QTextStream :: readline的
  • 的QString
  • QStringList中
  • 的QString ::分割
  • Q_FOREACH