проблема выравнивания списка - PullRequest
1 голос
/ 28 июня 2011

interface

enter image description 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 ]

3 голосов
/ 28 июня 2011

Это вероятно связано с вкладками во входном потоке в сочетании с различными размерами полей.

Если вы изучите две строки, где второй столбец смещен дальше влево, чем другиевы увидите, что они относительно короткие 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
1 голос
/ 28 июня 2011

Вы должны использовать QTableView с 4 столбцами вместо QListview. И вы должны найти следующие классы и функции в отличной справочной системе Qt:

  • QTextStream
  • QTextStream :: Readline
  • QString
  • QStringList
  • QString :: сплит
  • Q_FOREACH
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...