用QSplitter分裂器实现QTextEdit窗口大小的变化

 
    在写串口程序中,我想实现接收窗口的宽度可调,这样在调试一些数据协议的时候,我就可以通过调整这个接收框的大小来使接收的数据协议正好占满一行或几行,那么我去查看和判断协议的时候就可以很清楚的分辨了。不过我用google查了不少资料愣是没找到QTextEdit能实现这功能,其他的简单实现也没发现,最后就发现了QSplitter这个可以分割窗口的类。不过发现这个类使用也不是那么简单,看了下别人写,发现不能只对一个QTextEdit来操作分裂器,至少要2个以上QTextEdit来操作,那么只能这样办了。
    我在窗口设计上增加了一个QTextEdit窗口,和接收的窗口并列,并选中两个窗口,右击选择使用分裂期水平分裂,那么就能在这两个窗口上使用QSplitter,接着我把新的窗口的属性设置了下,像只读、失效鼠标之类的选中功能,右击无界面,也没显示边框,这样看上去就和背景差不多了。尝试了下,效果还不错,能调整接收框的宽度了,还看不出这用两个窗口实现的。
    下面还有一个问题,就是打开的时候,QSplitter默认了两个窗口排布的比例,而我想接收框的比例放到最大,那样看上去比较好看啊,这样我就要设置QSplitter的排布比例了,继续去搜,发现说的最多的是用:
    
 void setStretchFactor ( int index, int stretch )
    进行调整,结果我试了好久,也看了不少例子和资料,愣是没有弄懂。没办法,只能自己看QSplitter的文档,在尝试了不少函数之后发现了一个有效的函数:
    
void  setSizes ( const QList<int> & list )
    这个函数可以设置每个窗口的像素大小,我是这么设置的:
    
    QList<int> list;
    list << 400;//设置接收窗口的像素值
    list << 0;  //设置第二个窗口的像素值
    qsplitter->setSizes(list);
    这样打开界面就能初始化这个分裂器,和我要求的一样,终于搞定了。
 
    不过就是感觉这种方式麻烦了一点,不知道有没更简单的方式???
posted @ 2013-05-31 09:19  吾乐  阅读(3373)  评论(1编辑  收藏  举报