我想使用setDefaultStyleSheet
函数将一些自定义样式表应用于QTextDocument,但是它会被忽略。
根据{{3}}的帖子,我应该在设置html内容后在 之后添加样式表,但这并不能解决我的问题。
我的代码:
QString *html = new QString();
*html = "<tr>" + name + "</tr>"
"<tr>" + surname + "</tr>"
"<tr>" + age + "</tr></table>";
QTextDocument doc;
doc.setHtml(*html);
doc.setDefaultStyleSheet("table { border: 1px solid black; }"); // This should apply the style sheet
答案 0 :(得分:1)
这里的问题是border
属性QString *html = new QString();
*html = "<table border = 1> <tr>" + name + "</tr>"
"<tr>" + surname + "</tr>"
"<tr>" + age + "</tr></table>";
QTextDocument doc;
doc.setDefaultStyleSheet("table { border: 1px solid black}");
doc.setHtml(*html);
(不要与CSS速记混淆)必须设置为大于或等于1的值,否则将不会显示边框。考虑以下代码:
QTextDocument
此外,您在回答中提到必须在设置html之后的 之后添加样式表,但是setDefaultStylesheet()
的{{3}}似乎表示其他含义:< / p>
例如,使用setHtml()或QTextCursor :: insertHtml(),默认样式表将应用于所有新插入到文档中的HTML格式的文本。
为什么上面的代码中setHtml()
在{em> {{1}}之前。
答案 1 :(得分:0)
您还可以将样式信息添加到HTML文档内的<style>
标记中。从Qt 5.12开始有效,但似乎是未记录的行为(list of supported tags中至少没有提到style
)。
您的代码应为:
QString *html = new QString();
*html = "<html>"
" <head><style>table { border: 1px solid black; }</style></head>"
" <body>"
" <table border = 1>"
" <tr>" + name + "</tr>"
" <tr>" + surname + "</tr>"
" <tr>" + age + "</tr>"
" </table>"
" </body>"
"</html>";
QTextDocument doc;
doc.setHtml(*html);
(实际上,我仅使用Qt QML Text元素对此进行了测试。但是由于它在内部映射到QTextDocument,因此我很确定这也适用于QTextDocument本身。很抱歉。)