我正在尝试编写需要使用Java中的Graphics2D类绘制许多字符串的应用程序.我需要获取每个String对象的大小(以计算每个字符串的确切位置).在调用paint()方法之前应该完成很多字符串,并且在程序开始时只执行一次(所以我还没有Graphics2D对象).我知道有一个方法Font.getStringBounds()但它需要一个FontRenderContext对象作为参数.
当我试图创建自己的对象时:
FontRenderContext frc = new FontRenderContext(MyFont.getTransform(), true, true)
Run Code Online (Sandbox Code Playgroud)
然后获取字符串边界我总是得到不同的大小,而不是我在paint()方法中使用Graphics2D.getFontRenderContext()方法获得FontRenderContext.差异不大(约1E-3),但我想知道为什么会有任何区别?
但是,有没有更好更安全的方法来获取字符串的大小?
Thnx提前提供任何帮助!
我正在尝试为QTreeView实现QAbstractItemModel.我有插入行的问题.我注意到,如果我在我的应用程序的开头插入一切正常.但是如果我稍后插入行 - 在执行其他操作(如选择等)之后,新项目将保持不可见.而且QTreeView似乎根本不起作用!我是否必须发出一些信号来通知QTreeView有关行插入的信息?
这是我的插入方法:
bool LayersModel::insertRows(int position, int count, const QModelIndex & parent)
{
LayersModelItem * parentItem = getItem(parent);
if (position > parentItem->childCount())
return false;
beginInsertRows(parent,position,position+count-1);
bool result = true;
for (;count;--count)
result &= parentItem->insertChildren(position, new LayersModelItem());
endInsertRows();
return result;
}
Run Code Online (Sandbox Code Playgroud)
LayersModelItem是具有QList及其子项和数据的类.
我的项目的完整代码(需要KDE库)在这里:https: //github.com/coder89/PhotoFramesEditor/tree/v0.0.8 要查看问题,请在主窗口中选择一个蓝色项目,然后右键单击它,选择"删除项目".(这个方法在Canvas :: removeItems())并且它是完整的评论 - 我很绝望,我试图找到这个问题的原因...(事实上它不是删除任何东西 - 它添加了新项目).
感谢您的帮助和建议!
可能的重复:
SVG 是否支持位图图像的嵌入?
我正在尝试将 PNG 图像插入到 SVG 文件中。如果我使用 <image> 标签,我只能设置对 PNG 图像的引用。我不想将整个 PNG 数据放入 SVG,因为如果 PNG 文件将被移动或删除,我的 SVG 文件仍应使用这些 PNG 数据呈现。
SVG格式可以吗?
先感谢您!