查找QFont

查找QFont

问题描述:

文本宽度我在我的树模型两个项目我有文字小的差异alignment.Is这引起文本的宽度,但我检查使用文本QFontMetrics的宽度::宽度(),但两者文字相同。查找QFont

文本1:111601756
文本2:999999996

,作为您可以看到有在第二个文本轻微对齐问题的图像。

enter image description here

下面是示例代码我尝试: -

QFont font("times",24); 
QFontMetrics metrics(font); 
qDebug() << "Width 1" <<  metrics.width(QString::number(111111111)); 
qDebug() << "Width 2" << metrics.width(QString::number(999999999)); 

输出:

宽度1 153

宽度2 153

MyDelegate漆功能: -

void LiDefaultTreeDelegate::paint(QPainter *painter, const  
QStyleOptionViewItem &option, const QModelIndex &index) const 
{ 
QStyleOptionViewItem newOption = option; 
if(index.data(Qt::DisplayRole).toString() != NULL) 
{ 

    QString text = index.data(Qt::DisplayRole).toString(); 

    QFontMetrics fnMetrics(fn); 
    newOption.rect = fnMetrics.boundingRect(text); 
    //Case 1 
    //newOption.rect.setWidth(fnMetrics.width(text)); 
    //Case 2 
    //newOption.rect.setWidth(fnMetrics.width('0') * option.rect.width()); 
} 
    QStyledItemDelegate::paint(painter, newOption, index); 
} 

现在的问题是画在错误的地区发生,因为从你可以看到数据被画上根项目顶部的图像。任何线索我在这里失踪。

新输出:

enter image description here

这里的一个局部的答案,部分投机:

宽度是正确的(该字体)。这个问题似乎是,该QTreeView则不能使用宽度,它采用了边界矩形的宽度(这是我的猜测而已,而不是100%确定)。要查看宽度的差异,请尝试以下版本的测试代码:

QFont font("times",24); 
QFontMetrics metrics(font); 
qDebug() << "Rect 1" << metrics.boundingRect(QString::number(111111111)); 
qDebug() << "Rect 2" << metrics.boundingRect(QString::number(999999999)); 

它应该显示第一个矩形宽度较小。这是因为,即使焦炭间距相同,1实际上是窄的是9,所以在字符串的左边和右边更空的空间。并且边界矩形排除了这个空白空间,它报告显示所有绘制的最小矩形。

所以你需要寻找到哪些吸引你的模型项目的代表,这个问题是存在的!如果一切都失败了,你可能需要实现你自己的代理来完成绘图。


现在的问题所示的代码建议的修复:

newOption.rect = fnMetrics.boundingRect(text); // existing line 
newOption.rect.setWidth(fnMetrics.width(text)); // add width adjustment 

请注意,您可能还需要调整绘画对齐,如果现在是中心的,因为你可能想左有理由的文字。

注意,此修复程序假定该字体对所有字符数(我认为这对于大多数字体,否则数字将是很难读)相同的宽度,并且数字有同样多的数字。如果没有,你可以尝试这样的事情,而不是,让宽度相等的所有项目:

newOption.rect.setWidth(fnMetrics.width('0') * desiredColumnWidth); // width adjustment 
+0

感谢海德,这是一个很好的解释我已经从试图我的提示,但仍存在问题。我编辑了我的问题。 –

+0

@anbuselvan在答案中增加了新部分! – hyde

+0

感谢您的更新解决方案,我已更新我的问题。 –

这里是我的朋友在其他blog.The问题就在这里提供的答案是字体系列,例如这里的字体家族是MS Shell Dlg 2,它使用文本中可用的空间,比1更窄,因此它使用该空间,从而导致对齐问题,但是存在使用固定宽度的字体族。所以这里的技巧是更改字体家庭使用固定宽度来避免这个问题。

对于示例以下是一些家庭使用固定宽度: -

  1. 时报
  2. 快递
  3. 快递新