• 6418阅读
  • 3回复

[提问]TextEdit 高度随内容自适应 [复制链接]

上一主题 下一主题
离线rjw1900
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-21
现在项目中需要一个提示框,但是提示的内容是不固定的,有长有短,现在要做成的效果是,无论内容有多少,都让textedit的高度和内容的高度一致(textedit已经设置了自动换行)


我参考   http://www.qtcn.org/bbs/read-htm-tid-50958.htmlhttp://blog.csdn.net/IBM123/article/details/5496970,做了下,程序中的效果如下:




提示框的高度和内容的高度总是差了一点。请大神们看看,这个怎么解决?  谢谢。其实我的主要目的就是让 textedit 里的文字剧中显示(垂直和水平)
离线XChinux

只看该作者 1楼 发表于: 2013-03-21
放个QVBoxLayout,将 QTextEdit放到里面去,上、下两边插入个 spaceritem 。
然后自动计算调整QTextEdit的高度。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线rjw1900

只看该作者 2楼 发表于: 2013-03-21
引用第1楼XChinux于2013-03-21 11:08发表的  :
放个QVBoxLayout,将 QTextEdit放到里面去,上、下两边插入个 spaceritem 。
然后自动计算调整QTextEdit的高度。





我之前加了,就是自动计算调整高度弄得不对。
我的代码是这么写的
  1. void CTipDialog::slot_textAreaChanged()
  2. {
  3.     QTextDocument *document=qobject_cast<QTextDocument*>(sender());  
  4.     if(document)
  5.     {  
  6.         document->adjustSize();
  7.         QTextEdit *editor=qobject_cast<QTextEdit*>(document->parent()->parent());  
  8.         if (editor)
  9.         {  
  10.             int newheight = document->size().rheight();  
  11.             if (newheight != editor->height())
  12.             {  
  13.                 editor->setFixedHeight(newheight);  
  14.             }  
  15.         }  
  16.     }  
  17. }

这样计算,但是textedit的高度总是比文字的高度要多点,怎样才能正好匹配文字的高度呢?
离线rjw1900

只看该作者 3楼 发表于: 2013-03-21
引用第1楼XChinux于2013-03-21 11:08发表的  :
放个QVBoxLayout,将 QTextEdit放到里面去,上、下两边插入个 spaceritem 。
然后自动计算调整QTextEdit的高度。

我还试着这样写 还是不对:
  1. void CTipDialog::slot_textAreaChanged()
  2. {
  3.     QTextDocument *document=qobject_cast<QTextDocument*>(sender());  
  4.     if(document)
  5.     {  
  6.         document->adjustSize();
  7.         int iHight = 0;
  8.         QTextEdit *editor=qobject_cast<QTextEdit*>(document->parent()->parent());  
  9.         if (editor)
  10.         {  
  11.             QTextBlock tb = document->begin();
  12.             QTextLayout *pTl = tb.layout();
  13.             if (NULL != pTl)
  14.             {
  15.                 int isz = pTl->lineCount();
  16.                 for (int i=0; i<isz; ++i)
  17.                 {
  18.                     QTextLine li = pTl->lineAt(i);
  19.                     if (!li.isValid())
  20.                     {
  21.                         return ;
  22.                     }
  23.                     iHight += li.naturalTextRect().height();
  24.                     
  25.                 }
  26.             }
  27.             //int newheight = document->size().rheight();  
  28.             if (iHight != editor->height())
  29.             {  
  30.                 editor->setFixedHeight(iHight);  
  31.             }  
  32.         }  
  33.     }  
  34. }


快速回复
限100 字节
 
上一个 下一个