Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: moskk от Октябрь 22, 2012, 18:00



Название: подогнать размер QTextBrowser под контент
Отправлено: moskk от Октябрь 22, 2012, 18:00
привет всем.
допустим, я хочу отобразить таблицу из элементов, унаследованных от QTextBrowser. при этом нужно, чтобы в браузерах не было скролов, а весь текст был виден целиком. для этого мне нужно размеры ячейки таблицы сделать равными размерам браузера. а как их узнать?
гуглю уже полдня, пока безрезультатно.


Название: Re: подогнать размер QTextBrowser под контент
Отправлено: Bepec от Октябрь 22, 2012, 18:05
Моск, съешь орехов. Нафига тебе таблица из TextBrowser'ов?


Название: Re: подогнать размер QTextBrowser под контент
Отправлено: GreatSnake от Октябрь 22, 2012, 18:09
Код
C++ (Qt)
QTextDocument* QTextEdit::document() const
QSizeF QTextDocument::size() const


Название: Re: подогнать размер QTextBrowser под контент
Отправлено: moskk от Октябрь 22, 2012, 18:22
Моск, съешь орехов. Нафига тебе таблица из TextBrowser'ов?
сам Натс посетил мой скромный топик! ;D! зачем - это другой вопрос. например, я хочу таблицу с ричтекстом без возможности редактирования.
знаю, что пихать виджеты в таблицу некрасиво, красивее написать делегат для отрисовки, но там будет та же проблема (уже пробовал).

Код
C++ (Qt)
QTextDocument* QTextEdit::document() const
QSizeF QTextDocument::size() const
вот кусок тестовой программки (на форме без всякого лайаута лежит браузер)
Код
C++ (Qt)
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   const QSizeF& sf = ui->textBrowser->document()->size();
   ui->textBrowser->setGeometry(0, 0, sf.width(), sf.height());
}
 
текст в браузер вбит в дизайнере. document()->size() возвращает QSizeF с двумя нулями.


Название: Re: подогнать размер QTextBrowser под контент
Отправлено: moskk от Октябрь 23, 2012, 16:01
как выяснилось, простейший HTML можно отображать в QLabel, для моей задачи этого достаточно. у QLabel есть ф-я contentsRect(), которая, в отличии от такой же функции в QTextBrowser, работает так, как ожидается.
вот код:
Код
C++ (Qt)
   // QStringList found;   // результаты поиска
   int maxWidth = 0;
   for(int ind = 0; ind < found.count(); ++ind)
   {
       const QString& itmHtml = found.at(ind);
       QLabel *lab = new QLabel(itmHtml, ui->tableIncludes);
       lab->adjustSize();
       if(lab->contentsRect().width() > maxWidth)
       {
           maxWidth = lab->contentsRect().width();
       }
 
       int row = ui->tableIncludes->rowCount();
       ui->tableIncludes->insertRow(row);
       ui->tableIncludes->setRowHeight(row, lab->contentsRect().height());
       ui->tableIncludes->setCellWidget(row, 0, lab);
   }
 
Верес, спасибо за идею  :D


Название: Re: подогнать размер QTextBrowser под контент
Отправлено: Bepec от Октябрь 23, 2012, 18:35
Собственно к тому я и вёл :)

PS можно ещё и извратиться - вместо десятков и сотен - показывать картинку, которая будет генериться с одной QLabel.


Название: Re: подогнать размер QTextBrowser под контент
Отправлено: GreatSnake от Октябрь 23, 2012, 18:47
Имхо, самый оптимальный вариант - создать делегат с QTextDocument и рендерить его через QTextDocument::drawContents().