QTextDocument HTML Table 宽度
QTextDocument HTML Table width
我正在努力解决 QT5 问题。我正在尝试构建(然后在 QPainter
对象上绘制)HTML table。这是我的代码:
QTextDocument td;
QString table_style= QString("<style type=\"text/css\">"
".tg { table-layout: fixed; width: 200px; }"
".tg td{padding-bottom: 5px;border-style:solid;border-width:0px;}"
".tg .tg-3x1q{color: rgba(255, 255, 255, 0.5); text-align:right}"
".tg .tg-6bqv{color: rgba(255, 255, 255, 0.5); padding-left: 5px;}"
"</style>");
QString table_html = QString(" <table width=\"500px\" class=\"tg\">"
"<tr>"
"<td class=\"tg-3x1q\" width=\"150px\">1</td>"
"<td class=\"tg-6bqv\" width=\"150px\"><sup>th</sup></td>"
"</tr>"
"<tr>"
"<td class=\"tg-3x1q\" width=\"150px\">2</td>"
"<td class=\"tg-6bqv\" width=\"150px\"><sup>rpm</sup></td>"
"</tr>"
"<tr>"
"<td class=\"tg-3x1q\" width=\"150px\">3</td>"
"<td class=\"tg-6bqv\" width=\"150px\"><sup>km/h</sup></td>"
"</tr>"
"</table>");
td.setDefaultStyleSheet(table_style);
td.setHtml(table_html);
td.drawContents(painter);
table 在画家中正确显示,但没有固定的列宽。为了达到这个结果,我几乎尝试了所有方法:
- 不支持设置
table-layout: fixed
但从 QT's docs 开始(但宽度是!)
- 设置
width
带或不带双引号,相对或绝对
- 在每个单元格中插入一个固定宽度
div
尝试(在这个问题之后 http://www.qtcentre.org/threads/31661-QTextDocument-style-CSS-does-not-work)添加正文样式。像这样
td.setHtml(table_style + table_html);
None 这些方法奏效了。此外,如果我尝试添加一些空格来填充行,一旦 table 被绘制,它们就会被修剪掉。我还读到我可以使用 WebView
来实现结果,但它太慢了。
我卡住了,希望有人能帮我弄清楚。
QTextDocument
不是任何标准 HTML 的渲染器。它实现了一个稍微不兼容的 HTML- 和 CSS- 子集。例如,不支持 px
后缀。所有尺寸都以像素(无后缀)或百分比(带 %
后缀)为单位。您可能希望尝试不带 px
后缀的宽度。
您只能依赖其实现的标记的 QTextDocument
相关文档,而不是一般的 HTML/CSS 文档。
我正在努力解决 QT5 问题。我正在尝试构建(然后在 QPainter
对象上绘制)HTML table。这是我的代码:
QTextDocument td;
QString table_style= QString("<style type=\"text/css\">"
".tg { table-layout: fixed; width: 200px; }"
".tg td{padding-bottom: 5px;border-style:solid;border-width:0px;}"
".tg .tg-3x1q{color: rgba(255, 255, 255, 0.5); text-align:right}"
".tg .tg-6bqv{color: rgba(255, 255, 255, 0.5); padding-left: 5px;}"
"</style>");
QString table_html = QString(" <table width=\"500px\" class=\"tg\">"
"<tr>"
"<td class=\"tg-3x1q\" width=\"150px\">1</td>"
"<td class=\"tg-6bqv\" width=\"150px\"><sup>th</sup></td>"
"</tr>"
"<tr>"
"<td class=\"tg-3x1q\" width=\"150px\">2</td>"
"<td class=\"tg-6bqv\" width=\"150px\"><sup>rpm</sup></td>"
"</tr>"
"<tr>"
"<td class=\"tg-3x1q\" width=\"150px\">3</td>"
"<td class=\"tg-6bqv\" width=\"150px\"><sup>km/h</sup></td>"
"</tr>"
"</table>");
td.setDefaultStyleSheet(table_style);
td.setHtml(table_html);
td.drawContents(painter);
table 在画家中正确显示,但没有固定的列宽。为了达到这个结果,我几乎尝试了所有方法:
- 不支持设置
table-layout: fixed
但从 QT's docs 开始(但宽度是!) - 设置
width
带或不带双引号,相对或绝对 - 在每个单元格中插入一个固定宽度
div
尝试(在这个问题之后 http://www.qtcentre.org/threads/31661-QTextDocument-style-CSS-does-not-work)添加正文样式。像这样
td.setHtml(table_style + table_html);
None 这些方法奏效了。此外,如果我尝试添加一些空格来填充行,一旦 table 被绘制,它们就会被修剪掉。我还读到我可以使用 WebView
来实现结果,但它太慢了。
我卡住了,希望有人能帮我弄清楚。
QTextDocument
不是任何标准 HTML 的渲染器。它实现了一个稍微不兼容的 HTML- 和 CSS- 子集。例如,不支持 px
后缀。所有尺寸都以像素(无后缀)或百分比(带 %
后缀)为单位。您可能希望尝试不带 px
后缀的宽度。
您只能依赖其实现的标记的 QTextDocument
相关文档,而不是一般的 HTML/CSS 文档。