将自定义样式表应用于QTextDocument

时间:2018-11-30 16:58:15

标签: c++ qt

我想使用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

2 个答案:

答案 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本身。很抱歉。)