2011-06-28 17 views
1

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 

は私が私のリストボックスのアイテムを揃えるために役立つ

答えて

3

ですフィールドサイズ。

2番目の列が他の列よりも左にシフトしている2つの行を調べると、比較的短いIPアドレスであることがわかります。 .区切り文字は、使用しているプロポーショナルフォントのシンナー文字であるため、エディタで8のタブストップと固定幅フォントを使用している可能性がありますが、リストボックスは異なる特にです。

第3列がシフトされている行(すでに述べた2つ以外)の行については、同上。

リストボックスの固定幅フォントを選択するだけで解決できる場合があります。私の意見では、あなたの最高のベットは、各行を列に分けることになります。最初の2つの列にはスペースがないため(IPアドレス)、これを行うことができます。

次に、固定幅フォントを使用して、各列を一定のサイズにスペースで区切って表示します。これにより、タブ幅がの両方の問題が修正されます。

たとえば、最初の行があってもよい。

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

セパレート(タブまたは任意の他の区切り文字が使用されている時分割)は、3つの異なるデータ項目には、パッドは、2つのIPデータ項目を解決することをそれぞれ15文字(最大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 
+0

ありがとうございました。しかし、どのようにパッドしても、私はアイテムfを取り戻しています私はその項目にいくつかの仕事をしなければならないので、リストボックスはパディング効果になります。 – sajid

+0

正しい長さになるまでスペースを追加するか、 'stringstream'のようなものを使って簡単にすることができます。 _back_をリストから取り出して元のフォームを使用する場合は、15文字全体を抽出して後続のスペースを取り除く必要があります。 – paxdiablo

1

あなたが代わりにQListviewの4列のQTableViewを使用する必要があります。そして、あなたは優れたQtのヘルプシステムでは、以下のクラスや関数を調べる必要があります。

  • QTextStream
  • QTextStream :: readlineの
  • QStringの
  • QStringList
  • QStringの::
  • Q_FOREACHを分割
関連する問題