您的位置:首页 > 其它

对滚动区域QScrollArea用法的摸索

2012-04-01 21:28 489 查看
好久没用Qt了。最近在为单片机驱动电机运动的小***做轨迹生成程序。发现《C++ GUI Programming with Qt 4》(Second Edition)这本书中的Icon Editor这个例子很合适做我那个程序的轨迹绘制面板,就直接拿来用了。

我在IconEditor的外部实现了对IconEditor进行放大和缩小的函数。随着编写的进行发现如果我将IconEditor中的图形放大得太大后,有些部分就超出了主窗口的显示范围了。这样我在它上面画点的时候,就不可避免的有些部分在放大的情况下画不到了。

[b] 这很容易让我们想到可以给它加个滚动条。这样当它超出主窗口大小时,可以通过拖动滚动条来显示被隐藏的部分。

[/b]

[b]
[/b]《C++ GUI Programming with Qt 4》(Second Edition)这本书第六章的布局管理中恰有给IconEditor添加滚动条的章节,真是太好了。书中用的是QScrollArea这个类,实现后结果如图:



[b]
那么我想我只要在Qt Creator的Design模式下给我的程序添加一个QScrollArea,再将IconEditor控件拖进去就行了。结果是——滚动条根本不出现。我试了很多方法,什么setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn)让ScrollBar强制显示,什么显式地调用QScrollArea的show()函数,什么调用setWidgetResizable(ture)来告诉QScrollArea要自动重新绘制该窗口部件的大小等等。这些方法都没有效果,滚动条还是完全无效。
[/b]

[b]
之后我好好看了下Qt Creator的Design模式下右侧的控件栏,发现在QScrollArea下还有个名为scrollAreaWidgetContents的QWidget控件。为什么将QScrollArea拖入程序窗口后还会“附送”这么个控件呢?也许QScrollArea默认的就是用这个控件作为它的显示区的吧?不过既然都是QWidget,我就用“Promote to”的方法,将这个[b]scrollAreaWidgetContents直接提升为了IconEditor。满心欢喜地点运行,结果还是——滚动条无效。
[/b]

[/b]


经过一阵Baidu+Google,发现网上全是[b][b]《C++ GUI Programming with Qt 4》(Second Edition)中6.4滚动区域一节的抄袭。。。唯一一个有用的信息就是:不用Qt Creator的界面编辑器来编辑界面,自己写界面,自己单独调用QScrollArea。可我都已经用了界面编辑器了。经过一阵疯狂的尝试,我的解决办法如下:[/b][/b]

[b]
1.在Qt Creator的Design模式中,取消掉程序界面的布局。已有的控件随便放就行了。


[/b]

[b]
2.在主程序的类(比如mainwidows)中添加一个QScrollArea指针(如[b]QScrollArea
*scrollArea)。[/b]

[/b]

[b]
3.在主程序的构造函数中增加如下语句:
[/b]



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时,滚动条才有效。

[b] 最后滚动条实现的图片为:

[/b]

[b]


[/b]

[b][b] 以上就是我对QScrollArea用法的摸索,不知大家还有没有别的更简单的方法?[/b][/b]

[b]对QScrollArea用法的摸索(2)

[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: