大家好,我遇到了一个问题。我有一个 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/