Russian Qt Forum
Ноябрь 26, 2024, 16:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: подогнать размер QTextBrowser под контент  (Прочитано 4458 раз)
moskk
Гость
« : Октябрь 22, 2012, 18:00 »

привет всем.
допустим, я хочу отобразить таблицу из элементов, унаследованных от QTextBrowser. при этом нужно, чтобы в браузерах не было скролов, а весь текст был виден целиком. для этого мне нужно размеры ячейки таблицы сделать равными размерам браузера. а как их узнать?
гуглю уже полдня, пока безрезультатно.
Записан
Bepec
Гость
« Ответ #1 : Октябрь 22, 2012, 18:05 »

Моск, съешь орехов. Нафига тебе таблица из TextBrowser'ов?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Октябрь 22, 2012, 18:09 »

Код
C++ (Qt)
QTextDocument* QTextEdit::document() const
QSizeF QTextDocument::size() const
Записан

Qt 5.11/4.8.7 (X11/Win)
moskk
Гость
« Ответ #3 : Октябрь 22, 2012, 18:22 »

Моск, съешь орехов. Нафига тебе таблица из TextBrowser'ов?
сам Натс посетил мой скромный топик! Смеющийся! зачем - это другой вопрос. например, я хочу таблицу с ричтекстом без возможности редактирования.
знаю, что пихать виджеты в таблицу некрасиво, красивее написать делегат для отрисовки, но там будет та же проблема (уже пробовал).

Код
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 с двумя нулями.
Записан
moskk
Гость
« Ответ #4 : Октябрь 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);
   }
 
Верес, спасибо за идею  Веселый
Записан
Bepec
Гость
« Ответ #5 : Октябрь 23, 2012, 18:35 »

Собственно к тому я и вёл Улыбающийся

PS можно ещё и извратиться - вместо десятков и сотен - показывать картинку, которая будет генериться с одной QLabel.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Октябрь 23, 2012, 18:47 »

Имхо, самый оптимальный вариант - создать делегат с QTextDocument и рендерить его через QTextDocument::drawContents().
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.145 секунд. Запросов: 22.