-
UID:115891
-
- 注册时间2011-04-27
- 最后登录2013-04-09
- 在线时间173小时
-
- 发帖175
- 搜Ta的帖子
- 精华0
- 金钱1830
- 威望190
- 贡献值0
- 好评度180
-
访问TA的空间加好友用道具
|
修改:「时序」对初始化的影响,见最后。 第一组测试代码: - int main(int argc, char *argv[])
- {
- // ......省略创建QApplication & QMainWindow 过程
- QDockWidget* pDockw = new CustomDockWidget;
- mainWidow.addDockWidget(Qt::LeftDockWidgetArea, pDockw);
- // [A]
- }
- class CustomDockWidget : public QDockWidget
- {
- public:
- QSize sizeHint() const
- {
- // 初始化窗口大小;
- return QSize(500, 900); // [B]
- }
- };
在 的位置分别改写一下内容,测试:QSize(10, 900); // [1] QDockWidget.width = 73;QSize(100, 900); // [2] QDockWidget.width = 100;QSize(200, 900); // [3] QDockWidget.width = 200; 测试结果:除[1]的数值太小,被设置成了width=73, 其它俩个测试符合测试结果,即:准确显示了QDockWidget在QMainWindow中的宽(“高”未试验)。结论:在无widget的情况下, 使用sizeHint进行初始大小设置是有效的. 第二组测试代码:“在以上代码的基础上增加”,代码如下:- [b]class MyWidget : public QFrame [/b]
- [b]{ [/b]
- [b]public: [/b]
- [b] QSize sizeHint() const [/b]
- [b] { [/b]
- [b] // 初始化窗口大小; [/b]
- [b] return QSize(500, 900); // [C][/b]
- [b] } [/b]
- [b]};[/b]
main 函数内增加([A]位置):- [b]{[/b]
- [b] MyWidget* pw = new MyWidget;[/b]
- [b] pDockw->setWidget(pw);[/b]
- [b]}[/b]
在的位置改写为最小的值: QSize(10, 900); 目的:减少QDockWidget设置对之后的影响。 在[C]的位置分别改写一下内容,测试:QSize(80, 900); // [1] QDockWidget.width = 80;QSize(150, 900); // [2] QDockWidget.width = 150;QSize(500, 900); // [3] QDockWidget.width = 500; 证实:在QDockWidget的宽度“极小”的情况下, 其内部Widget的大小,影响QDockWidget最终大小。 第三组测试:以上测试过程不变, 这次将在的位置改写为很大值: QSize(600, 900); 目的:测试QDockWidget的大小大于Widget大小时的结果. 结果:QSize(80, 900); // [1] QDockWidget.width = 80;QSize(150, 900); // [2] QDockWidget.width = 150;QSize(500, 900); // [3] QDockWidget.width = 500; 间接说明: 在QDockWidget内部有widget,且widget有确切初始值时, QDockWidget的初始值不再起最终作用. 第四组测试: 目标: 存储 & 恢复 QDockWidget几何信息;注释掉之前有关"MyWidget"的代码, 即:只有 QApplication & QMainWindow & QDockWidget 3个.使用 QSettings 做"存储 & 恢复". 有关QSettings的代码如下:[定义:]QSettings settings("<随便1>", "<随便2>");[恢复:]- [b][b][b]const QString key("<起个唯一名字, 存取对应>");[/b][/b][/b]
- [b][b][b]const QByteArray ba(settings.value(key + QLatin1String("/geometry")).toByteArray());[/b][/b][/b]
- [b][b][b]restoreGeometry(ba);[/b][/b][/b]
[存储:]- [b][b][b]settings.beginGroup("<起个唯一名字 存取对应>");[/b][/b][/b]
- [b][b][b]settings.setValue(QLatin1String("geometry"), saveGeometry());[/b][/b][/b]
- [b][b][b]settings.endGroup();[/b][/b][/b]
测试:在~CustomDockWidget内调用[存储]. 在addDockWidget完后[恢复]. 测试结果: 在取出normalGeometry时失败=>数据无效.验证结果:在~CustomDockWidget中,saveGeometry()之前,获取- [b][b][b]QRect rect1 = frameGeometry(); // 有效[/b][/b][/b]
- [b][b][b]QRect rect2 = normalGeometry(); // 无效 (0,0,-1,-1)[/b][/b][/b]
注: 为以防在析构过程中normalGeometry被"脏", 改为在app.exec();执行完毕后;最终结论:只有QDockWidget时,无法进行几何结构的有效存储. 第五组测试: 仅为MyWidget存储几何信息;测试方式: 分别在MyWidget的构造和析构函数里写上[恢复]和[存储].运行测试: -_-!! 失败 :(为什么没有恢复成功呢? 跟踪了[取出]时的 frameGeometry() 和 normalGeometry(),数据正确. 只有怀疑"初始值"啦~~ 第六组测试: 有有效恢复数据时,将"初始值"覆盖, 即: sizeHint返回[取出]的结果;运行测试: (^o^)~~ 补充:时序对初始化几何信息的影响。划分3件事情:a:设置中心widget。b:添加toolwidget(dockwidget)。c:show MainWindow。3个的时序不是完全随意的,当b=>c=>a时,设置失败(只有这种顺序失败)。
|