LINUX.ORG.RU

[Qt4] Таблица в QTextEdit - как задать стиль правой и нижней границы бордюра?


0

0

Здравствуйте!

Уже обсуждали похожую тему - http://www.linux.org.ru/view-message.jsp?msgid=3856806&lastmod=1247235682383. В этой теме половинчатое решение нашли - задавать cellspacing="-1", но таблица всеравно кривовата. Толщина вертикальных линий «гуляет» - от 1 pix до 2 pix.

Предложили мне другой метод - у ячеек отображать только левую и верхнюю границу бордюра, а правую и нижнюю - скрывать. А у всей таблицы отобразить только правую и нижнюю границу, а левую и верхнюю скрыть.

Начал я читать доки, экспериментировать в коде - нифига не получается задавать стиль для части бордюра. И вроде бы в доке

http://www.crossplatform.ru/documentation/qt/4.4.0/stylesheet-reference.php

даже написано про

border-top-style	Border Style	The style of the border's top edge.
border-right-style	Border Style	The style of the border's right edge/
border-bottom-style	Border Style	The style of the border's bottom edge.
border-left-style	Border Style	The style of the border's left edge.

но как этим воспользоваться неясно. Я пробовал вставлять в QTextEdit таблиццу всякими способами.

<table style="border:solid; border-right-style:none; border-bottom-style: none;">
<td style="border:solid; border-right-style:none; border-bottom-style: none;">

<table border-right-style="none" border-bottom-style="none">
<td border-right-style="none" border-bottom-style="none">

<table style="border:solid; border-right:none; border-bottom: none;">
<td style="border:solid; border-right:none; border-bottom: none;">

<table style="border-style:solid; border-style-right:none; border-style-bottom: none;">
<td style="border-style:solid; border-style-right:none; border-style-bottom: none;">

но стиль конкретной части бордюра (правой, нижней) не настраивается. Весь код, кроме style=«border-style:solid», в результирующем коде QTextEdit исчезает.

Читаю доку по объектам QTextTableFormat, QTextTableCellFormat - не вижу чтобы можно было задавать стиль для части бордюра. Можно только для всего бордюра стиль задать через setBorderStyle().

Вопрос - в Qt реально вообще установить нужный стиль для конкретной части бордюра? Как это сделать?


>Толщина вертикальных линий "гуляет" - от 1 pix до 2 pix.

Ничего там не гуляет. Ты задаёшь ширину, рендерер её заполняет. Если заданная ширина не делится нацело на сумму ширин ячеек, он дополняет её.

>Вопрос - в Qt реально вообще установить нужный стиль для конкретной части бордюра? Как это сделать?

Перегрузкой, например, QTextDocumentLayoutPrivate::drawTableCell( или QTextDocumentLayoutPrivate::drawBorder(

summatus
()
Ответ на: комментарий от summatus

> Ничего там не гуляет. Ты задаёшь ширину, рендерер её заполняет. Если заданная ширина не делится нацело на сумму ширин ячеек, он дополняет её.

Посмотри вот на эту картинку

http://i.piccy.info/i3/79/ac/8df931ec933ed5b7067543c71b5c.png

из нее видно, что проблема не в толщине линий (и не в том, что линия не попадает точно в пиксель и "размывается" на два пикселя), а в том, что вертикальные соседние границы двух ячеек просто не стыкуются.


> Перегрузкой, например, QTextDocumentLayoutPrivate::drawTableCell( или QTextDocumentLayoutPrivate::drawBorder(


А это что такое? В доке таких функций не нашел.

xintrea
() автор топика
Ответ на: комментарий от xintrea

В документации есть класс QAbstractTextDocumentLayout, а эти функции могут послужить основой для реализации наследника.

summatus
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.