对滚动区域QScrollArea用法的摸索
来源:互联网 发布:大数据解决方案供应商 编辑:程序博客网 时间:2024/06/08 02:39
好久没用Qt了。最近在为单片机驱动电机运动的小制作做轨迹生成程序。发现《C++ GUI Programming with Qt 4》(Second Edition)这本书中的Icon Editor这个例子很合适做我那个程序的轨迹绘制面板,就直接拿来用了。
我在IconEditor的外部实现了对IconEditor进行放大和缩小的函数。随着编写的进行发现如果我将IconEditor中的图形放大得太大后,有些部分就超出了主窗口的显示范围了。这样我在它上面画点的时候,就不可避免的有些部分在放大的情况下画不到了。
这很容易让我们想到可以给它加个滚动条。这样当它超出主窗口大小时,可以通过拖动滚动条来显示被隐藏的部分。
在《C++ GUI Programming with Qt 4》(Second Edition)这本书第六章的布局管理中恰有给IconEditor添加滚动条的章节,真是太好了。书中用的是QScrollArea这个类,实现后结果如图:
那么我想我只要在Qt Creator的Design模式下给我的程序添加一个QScrollArea,再将IconEditor控件拖进去就行了。结果是——滚动条根本不出现。我试了很多方法,什么setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn)让ScrollBar强制显示,什么显式地调用QScrollArea的show()函数,什么调用setWidgetResizable(ture)来告诉QScrollArea要自动重新绘制该窗口部件的大小等等。这些方法都没有效果,滚动条还是完全无效。
之后我好好看了下Qt Creator的Design模式下右侧的控件栏,发现在QScrollArea下还有个名为scrollAreaWidgetContents的QWidget控件。为什么将QScrollArea拖入程序窗口后还会“附送”这么个控件呢?也许QScrollArea默认的就是用这个控件作为它的显示区的吧?不过既然都是QWidget,我就用“Promote to”的方法,将这个scrollAreaWidgetContents直接提升为了IconEditor。满心欢喜地点运行,结果还是——滚动条无效。
经过一阵Baidu+Google,发现网上全是《C++ GUI Programming with Qt 4》(Second Edition)中6.4滚动区域一节的抄袭。。。唯一一个有用的信息就是:不用Qt Creator的界面编辑器来编辑界面,自己写界面,自己单独调用QScrollArea。可我都已经用了界面编辑器了。经过一阵疯狂的尝试,我的解决办法如下:
1.在Qt Creator的Design模式中,取消掉程序界面的布局。已有的控件随便放就行了。
2.在主程序的类(比如mainwidows)中添加一个QScrollArea指针(如QScrollArea *scrollArea)。
3.在主程序的构造函数中增加如下语句:
scrollArea = new QScrollArea(ui->centralWidget); scrollArea->setWidget(ui->editor);//设置为你想添加滚动条的widget scrollArea->setWidgetResizable(true); //自己为控件布局 hBoxLayout = new QHBoxLayout; hBoxLayout->addWidget(scrollArea);//将scrollArea添加进布局,当然其他布局也行。但是此句不可缺 hBoxLayout->addWidget(ui->tableWidget); ui->centralWidget->setLayout(hBoxLayout);
添加这些话后,还没完。我发现当IconEditor控件的sizePolicy设为Preferred时,其滚动条还是不会有效。只有当将IconEditor控件的属性设为Minimum时,滚动条才有效。
最后滚动条实现的图片为:
以上就是我对QScrollArea用法的摸索,不知大家还有没有别的更简单的方法?
对QScrollArea用法的摸索(2)
- 对滚动区域QScrollArea用法的摸索
- 对滚动区域QScrollArea用法的摸索
- 对滚动区域QScrollArea用法的摸索(2)
- QScrollArea 滚动区域
- Qt事例: QScrollArea滚动区域
- QScrollArea 滚动区域设置 背景色
- QScrollArea的自动滚动功能
- 在Qt4.8下为窗体添加滚动区域QScrollArea
- QScrollArea 自动完成滚动条的功能
- QT 利用QSplitter 分割区域, 并添加QScrollArea 滚动区域,滚动条
- 滚动视图QScrollArea
- 解决QScrollArea不能出现滚动条的问题
- Qt中QScrollArea的滚动条自动下拉
- Qt中QScrollArea的滚动条自动下拉
- QScrollArea 用法总结
- Qwidget 添加 滚动条 QScrollArea
- QScrollArea不能显示滚动条
- 对金山卫士界面的摸索
- EXCEL 函数
- JiBX初步
- JSF入门
- 黑马程序员—两种设计模式及其代码的实现—第11篇
- 用分治法输出一个一维数组中的n个不同实数间距离最小的两个实数
- 对滚动区域QScrollArea用法的摸索
- 多处最优问题
- 控制系统动态性能分析
- libxml库解析XML文件
- HTML编辑器FCKeditor使用详解
- 网球循环赛问题
- 清明节---山东又叫寒食节--吃冷食
- 使用Libxml2操作XML文档
- 数组实现队列