在QML中,我希望能够为简单的语义重用定义一组字体属性。例如,而不是:
from itertools import chain
print(type(doc_set))
print(len(doc_set))
for top in ldamodel.print_topics():
print(top)
print
# Assinging the topics to the document in corpus
lda_corpus = ldamodel[corpus]
#print(lda_corpus)
# Find the threshold, let's set the threshold to be 1/#clusters,
# To prove that the threshold is sane, we average the sum of all probabilities:
scores = list(chain(*[[score for topic_id,score in topic] \
for topic in [doc for doc in lda_corpus]]))
print(sum(scores))
print(len(scores))
threshold = sum(scores)/len(scores)
print(threshold)
cluster1 = [j for i,j in zip(lda_corpus,doc_set) if i[0][1] > threshold]
cluster2 = [j for i,j in zip(lda_corpus,doc_set) if i[1][1] > threshold]
cluster3 = [j for i,j in zip(lda_corpus,doc_set) if i[2][1] > threshold]
我希望能写下来:
IndexError: list index out of range
如何创建一个我可以分配的Text {
text: "This is a header"
font { family:'Encode Sans'; weight:Font.Black; italic:false; pointSize:24 }
}
值?
我知道我制作了一个组件,例如:
Text {
text: "This is a header"
font: headerFont
}
但是,当我想对font
或需要# Header.qml
Text {
font { family:'Encode Sans'; weight:Font.Black; italic:false; pointSize:24 }
}
# main.qml
Header { text:"This is a header" }
的其他地方使用相同的字体设置时,这不起作用。
我也知道我可以使用this question的答案,例如:
Label
font
虽然这确实是单一来源的,但如图所示,它是非常冗长的。
我试过了......
// style.js
.pragma library
var header = {
family: 'Encode Sans',
weight: Font.Black, // is this legal?
italic: false,
size: 24
};
...但// main.qml
import "style.js" as Style
Text {
text: "This is a header"
font {
family: Style.header.family
weight: Style.header.weight
italic: Style.header.italic
pointSize: Style.header.size
}
}
行错误“元素无法创建”。
答案 0 :(得分:12)
This answer完全涵盖了我的需求。我可以使用Qt.font()
方法创建具有我需要的属性的字体值。包含在具有全局ID的QtObject中,我可以:
### main.qml
QtObject {
id: theme
property font headerFont: Qt.font({
family: 'Encode Sans',
weight: Font.Black,
italic: false,
pointSize: 24
})
}
### AnyOther.qml
Text {
text: "This is a header"
font: theme.headerFont
}
答案 1 :(得分:0)
嗯,这真的不是一个明显的主题..我会把它作为一个答案,但它可能不是你问题的直接答案,尽管我希望它可能是一个帮助.. < / p>
.pragma是一种方法,直到你没有使用qtquickcompiler 或使用QT&gt; 5.6,.pragma库在Qt 5.5中被破坏然后使用qtquickcompiler,所以它不是我们案例的解决方案。
我们与QML字体斗争了好几个月,试图在我们的应用程序中获得正确,漂亮的字体,实际目标是让QML应用程序的字体看起来与操作系统中的其他字体完全相同(我是谈论WinXX)..所以QML应用程序中的Arial字体看起来与任何Windows应用程序中的Arial完全相同。
首先我们必须从QTRenderer切换到Native,因为FreeType渲染器在WinXX平台上看起来要差得多,然后是原生字体,至少它是使应用程序看起来更接近原生字体的一种方式。实际上从这一点来看,字符与OS中的字符一样,但是......
然后我们遇到很多问题,字符之间的间距错误(特别是非英文字母),字距等等。
其他问题是您无法在QML中更改许多QFont属性,但是它们可用,然后您从C ++导出的对象返回prebuild QFont对象..
我们最终得到的是遵循C ++代码框架:
QFont GlobalObject::createFont(const QString & family, int pixelSize, bool isBold, bool bKerning) const {
QFont ft = QFont(family);
ft.setFamily(family);
ft.setBold(isBold);
ft.setPixelSize(pixelSize);
ft.setKerning(bKerning);
return ft;
}
您可以为ft应用任何缓存,因此您可以按名称设置子集,无论您认为合适。这非常合适,具有适当的原生渲染,这是在QML应用程序中在WinXX上获得与像素相同的字体的唯一方法
所以我对答案的看法(根据我的经验)是在C ++中处理QFont对象,如果你想对事物的样子进行适当的微调,而不是试图在QML代码中使用它。