我是一个Wicket newb.这可能只是我对Wicket生命周期的无知所以请赐教!我的理解是Wicket WebPage对象被实例化一次然后被序列化.这给我带来了一些困惑,见下文.
目前我有一个模板类,我打算将其子类化.我按照Wicket文档中的示例演示了如何在子类中覆盖模板的行为:
protected void onBeforeRender() {
add(new Label("title", getTitle()));
super.onBeforeRender();
}
protected String getTitle() {
return "template";
}
Run Code Online (Sandbox Code Playgroud)
子类:
protected String getTitle() {
return "Home";
}
Run Code Online (Sandbox Code Playgroud)
这非常有效.我不清楚的是"最佳实践".似乎onBeforeRender()每次请求页面都会调用,不是吗?如果一切都在,这似乎会在页面上完成更多的处理onBeforeRender().我可以轻松地遵循其他Wicket示例的示例,并在构造函数中添加一些我不想覆盖的组件,但后来我将组件逻辑划分为两个位置,这是我犹豫不决的事情.
如果我添加一个我打算在所有子类中的组件,我应该将它添加到构造函数中onBeforeRender()吗?
我来自Java背景,最近决定尝试创建一个"有趣"的C++ Qt GUI应用程序.我一直在努力解决Java和c ++之间的许多细微差别,但我学到了很多东西.
我试图在我的C++编码中尽可能地匹配"java风格"语法.虽然这可能是也可能不是C++的"最佳实践",但我觉得在学习保持熟悉且一致的语法时会有所帮助.其中一个java语法残留是这样的:
//Java
MyObject o = new MyObject();
//C++
MyObject o = MyObject();
Run Code Online (Sandbox Code Playgroud)
现在,我理解C++有上面的语法快捷方式:
//C++
MyObject o();
Run Code Online (Sandbox Code Playgroud)
这很好,但正如我所说,我不想使用不同的语法.一切都很好,但是当我尝试下面的Qt代码时,我收到了一个惊喜:
QString filepath = "C:\\somefile";
QFile file = QFile(filepath);
Run Code Online (Sandbox Code Playgroud)
并得到编译错误:
c:\QtSDK\Desktop\Qt\4.7.2\mingw\include/QtCore/qfile.h:195: error: 'QFile::QFile(const QFile&)' is private within this context
Run Code Online (Sandbox Code Playgroud)
我读了Qt文档,发现确实没有公共构造函数QFile :: QFile(const QFile&).我的代码以前用于其他类的地方,有这样的构造函数.我可以在这里猜测并说出这条线:
QFile file = QFile(filepath);
Run Code Online (Sandbox Code Playgroud)
实际上是调用两个构造函数.谁能解释一下?