1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159 |
- <?xml version="1.0" encoding="UTF-8" ?>
- <messages>
- <message id="template">
- <div id="top_wrapper">
- <div id="top_content">
- ${languages}
- <div id="top_wt">
- <a href="//www.emweb.be/">
- <img src="/css/wt/emweb_powered.jpg" alt="Emweb" height="22" />
- </a>
- </div>
- </div>
- </div>
- <div id="banner_wrapper">
- <div id="banner_content">
- <div id="banner_end"> <div id="banner"><a href="#">Wt</a></div> </div>
- </div>
- </div>
- <div id="main_wrapper" class="home">
- <div id="main_content">
- <div id="main_menu">
- ${menu}
- ${sidebar}
- </div>
- ${contents}
- <div class="clearall"></div>
- </div>
- </div>
- <div id="footer_wrapper">
- <div id="footer_content">
- <div id="footer_copyright">
- <a href="//www.emweb.be/">
- <img src="/css/wt/emweb_large.jpg" height="25" width="101"
- alt="Emweb.be" title="emweb.be"/></a>
- 基于WEB的应用系统解决方案<br/>
- <a href="//www.emweb.be/">www.emweb.be</a>
- </div>
- <div id="footer_menu">
- <a href="//www.webtoolkit.eu/wt/">首页</a>
- | <a href="//www.emweb.be/contact">联系我们</a>
- </div>
- <div id="chat"></div>
- <script src="//www.webtoolkit.eu/wt/examples/simplechat/chat.js?div=chat" type="text/javascript"></script>
- <div class="clearall"></div>
- </div>
- <script type="text/javascript">
- /*<![CDATA[*/
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
- ga('create', 'UA-4345578-1', 'auto');
- ga('send', 'pageview');
- /* ]]> */
- </script>
- </div>
- </message>
- <message id="wt">Wt,C++ 网络开发工具包</message>
- <message id="introduction">简介</message>
- <message id="blog">博客</message>
- <message id="features">特点</message>
- <message id="documentation">文档</message>
- <message id="examples">示例</message>
- <message id="download">下载</message>
- <message id="community">社区</message>
- <message id="other-language">!C++</message>
- <message id="hello-world">Hello world</message>
- <message id="charts">图表示例</message>
- <message id="wt-homepage">Wt网站示例</message>
- <message id="treeview">树视图</message>
- <message id="git">Git查看器</message>
- <message id="chat">简单聊天示例</message>
- <message id="mail-composer">邮件编辑器</message>
- <message id="widget-gallery">Widget展示库</message>
- <message id="home.news">
- <h3><span>新闻</span></h3>
- </message>
- <message id="home.latest-news">
- <h4><span>最新消息</span></h4>
- </message>
- <message id="home.historical-news">
- <h4><span>重要消息</span></h4>
- </message>
- <message id="source-browser-link">
- <a href="{1}">查看源代码</a>
- </message>
- <message id="src-title">
- <div>
- </div>
- </message>
- <message id="home.intro">
- <h3><span>Wt:简介</span></h3>
- <p>Wt(音同'witty')是一个C++库,用以开发交互性Web应用。</p>
- <p>Wt的API<b>以widget为中心</b>,将桌面GUI APIs的良好测试模式引入Web开发。
- Wt为开发者提供了几乎所有Web实现细节的抽象,其中包括事件处理、图像支持、
- 优雅降级(或渐进增强)、及良好的URL处理。</p>
- <p>与其他诸多基于页面的开发框架相比,Wt可以创建状态化的应用,同时
- 实现了高度的交互性和可访问性;其交互性体现在Wt可以综合使用各种技术,
- 如Ajax等;其可访问性体现在Wt可以使应用在必要的时候支持纯HTML浏览器;
- 这些特性的获得充分利用了自动的<b>优雅降级或渐进增强</b>。</p>
- <p>Wt库还自带了应用服务器程序,可配置为独立的Web服务器,当然也允许
- 通过FastCGI连同其他Web服务器进行整合。</p>
- <h4>交互性、安全性、可访问性</h4>
- <p>基于页面的开发框架(如PHP、JSP/JSF、Ruby on Rails等)没有实现底层基础
- 技术的抽象,这些技术包括HTML/XHTML、JavaScript、CSS、Ajax、Forms、DHTML
- 、SVG/VML/Canvas等。显然,基于页面的开发框架必须要求开发者随时熟悉和掌握
- 这些基本技术,同时当浏览器不支持时,还要为应用的优雅降级负责。另外,如果
- 应用采取早期HTML页面为中心的设计模式,开发者不仅要实现控制器以告诉用户如何
- 从一个页面跳转到另一个页面,而且还要在采用一些高级Ajax技术时手工设计和维护
- 客户端与服务器端的通讯。</p>
- <p>另一方面,就算是纯粹的Ajax框架,也要求开发者通过繁杂的JavaScript编程来
- 处理浏览器的怪异行为和客户端与服务器端间的安全通讯,这些处理任何人都不能
- 跳过去不与理会。同时,这些应用通常不能符合可访问性的原则,也不能很好被搜索
- 机器人索引到。</p>
- <p>安全方面,生成HTML或填充HTML模版很容易导致安全问题,如<a
- href="http://en.wikipedia.org/wiki/Cross-site_scripting">跨站脚本(XSS)
- </a>和<a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">
- 跨站请求伪造(CSRF)</a>;XSS问题一般由(疏忽)允许嵌入JavaScript代码引起,
- CSRF问题一般由(相信)Cookies(可)作为认证手段引起。作为开发者,
- 这些安全问题将是很难避免的,因为我们有时需要允许用户插入自己的JavaScript
- 代码来实现某些功能,但开发框架本身却没提供给我们过滤机制。</p>
- <p>相反,使用Wt来部署Web应用可以完全用C++来开发,Wt自动产生所必须的
- HTML/XHTML、CSS、Javascript、CGI、SVG/VML/Canvas和Ajax代码;与此同时,
- 代码的安全性和浏览器兼容性等问题都将转交给Wt。例如,在可能的情况下,
- Wt将最大限度的使用JavaScript和Ajax,但在Ajax功能受限时,Wt也能保证
- 系统功能运行正常。其原理是Wt将先启用纯HTML/CGI应用,随后在可能的情况
- 下渐进增强至Ajax应用。另外,Wt提供了内置的安全性考虑。</p>
- <h4>典型应用举隅:</h4>
- <ul>
- <li>由于Wt C++ Web应用服务器占用较小的物理空间,故而可以为<b>嵌入式系统</b>
- 提供基于Web的GUIs;</li>
- <li>Wt可以为需要<b>整合现有C++库</b>的应用提供基于Web的GUIs, 这些
- 应用可能包括科学上的或工程上的应用;</li>
- <li>Wt可以创建从<b>现有C++桌面应用</b>到Web的有效渠道;</li>
- <li>Wt还可以应用于一些<b>高性能、复杂的</b>Web应用,这样的应用
- 一般具有高度定制、充分利用Ajax的特点,同时具有完全的可访问性和较高的
- 搜索引擎优化(SEO)需求</li>
- </ul>
- <h4>使用Wt的其他好处</h4>
- <ul>
- <li>可以使用我们熟悉的桌面GUI模式开发Web应用;</li>
- <li>Wt为我们提供了广阔的widgets集,这些widgets可以在环境不支持
- JavaScript的情况下照常工作(当然,如果支持则效果更佳);</li>
- <li>在Wt中客户端与服务器端的验证和事件处理采用同一规范;</li>
- <li>Wt允许开发者选择XHTML和CSS来进行布局和样式编辑;</li>
- <li>Wt可生成标准的、兼容的HTML或XHTML代码;</li>
- <li>Wt采用内联VML、内联SVG、HTML 5 画布或PNG可生成应用于Web的可移植的、
- 反锯齿的图像,当然这些图像还可以轻松渲染为PDF格式;</li>
- <li></li>
- <li>Wt可以避免常见的安全问题,因为Wt拥有对表示层的完全控制,并能够主动
- 过滤掉<i>处于活动状态的</i>标签和属性;Wt同时实现了业务逻辑的隐藏,并
- 通过状态化的设计简化了认证机制;</li>
- <li>基于Wt的应用的载入时间极短且占用带宽也很低,究其原因是Wt中这些特点
- 仅受限于页面显示的复杂程度,而不是应用程序自身的尺寸;Wt还实现了所有的
- 常用技巧和方法,以优化应用的快速反应,Wt几乎做到了针对所有浏览器的优化;</li>
- <li>Wt提供了服务器端初始的事件处理,即<i>服务器推</i>或<i>Comet</i>,
- 这部分API使用简单、稳定且在所有浏览器上均能实现;</li>
- <li>Wt在服务器部署上,既可以使用内置的httpd,又可以使用FastCGI/ISAPI,
- 当然前者实施起来更简便易行。</li>
- </ul>
- </message>
- <message id="home.features">
- <h3><span>特点</span></h3>
- <h4>核心库特点</h4>
- <ul>
- <li>支持所有主流浏览器(包括Firefox/Gecko、Internet Explorer、Safari、
- Chrome、Konqueror以及Opera),同时在纯HTML浏览器上亦能正常工作
- (已经测试过的有Links和Lynx);</li>
- <li>既可以在Unix/GNU Linux(gcc)上开发和部署,又可以在MS Windows
- (Visual Studio)上;</li>
- <li>Wt利用优雅降低与渐进增强可以保证应用在有无JavaScript或Ajax支持
- 的情况下动作行为尽可能一致(渐进增加须使用渐进启动方法);</li>
- <li>Wt整合了Unicode支持(UTF8/UTF16),便于全面实现本地化;</li>
- <li>当Ajax获得支持时,基于Wt的应用只有变化才被渲染;</li>
- <li>在Wt中,页面变化有可见变化和背景中不可见变化两类,当Ajax被支持时,
- 两类都会得到渲染,而当Ajax不被支持时,只有可见内容的变化被渲染;</li>
- <li>Wt中的会话跟踪选项是可以按需配置的,主要包括URL重写和Cookies两种;</li>
- <li>Wt中纯HTML页面或Ajax会话的动作行为是统一的,因此Wt支持浏览器历史
- 导航操作(向后、向前按钮和书签),可生成良好URL地址,利于搜索引擎
- 优化工作;</li>
- <li>Wt拥有高性能的特点,允许部署在低端嵌入式设备上,或者部署在所用功耗、
- 物理空间、经费预算等相对平衡的Internet或extranet网站上;</li>
- <li>Wt采用了完全基于事件驱动的异步I/O机制:会话不用绑定于线程,也不会延迟应答
- (如服务器推)或锁定线程;相反,线程只会被用来提高并发请求处理或事件循环
- 的重新进入。</li>
- </ul>
- <h4>事件处理</h4>
- <ul>
- <li>Wt使用类型安全的、基于模版的信号/槽系统来处理事件;</li>
- <li>支持对键盘、鼠标及焦点事件的监听,同时可以获得事件细节,比如鼠标键位、
- 键盘键位等;</li>
- <li>自动同步表单数据;</li>
- <li>Wt通过无状态槽实现获得了C++至JavaScript的动态转换;在此,单一C++槽的实现
- 提供了客户端和服务器端双重事件处理:即客户端实现显示的变化,服务器端实现
- 应用状态的变化;</li>
- <li>Wt还提供了面向开发者自定义的JavaScript代码的钩技术,比如让原本仅用于客户端
- 事件处理的JavaScript代码在执行后释放出C++信号;</li>
- <li>Wt提供了拖放API;</li>
- <li>Wt支持定时事件,同时内置支持服务器端初始更新(“服务器推”)。</li>
- </ul>
- <h4>原生的绘图系统</h4>
- <ul>
- <li>Wt提供统一的绘图API,此系统使用了浏览器原生的(向量)图像支持
- (如内联VML、内联SVG、HTML 5画布),也可以渲染到通用的图片格式
- (如PNG、GIF等等)或向量格式(如SVG、PDF等);</li>
- <li>Wt支持任意画笔路径、裁剪、输入文本、图像、变形、投影等</li>
- <li>使用绘图API可以绘制widget,或者创建SVG、PDF及PNG/GIF图像。</li>
- </ul>
- <h4>GUI组件</h4>
- 具体可进入<a href="//www.webtoolkit.eu/widgets">Widget展示库</a>
- 进行交互式体验。
- <h4>内置安全性</h4>
- <ul>
- <li>Wt采用Kernel级的内存保护方案,特别是在采用专属进程模式下,
- 会话之间完全隔离,这样Wt完全可以保护隐私数据免受程序错误的影响;</li>
- <li>Wt使用安全套接字协议层(SSL)或传输层安全协议(TLS)通过HTTPS
- 来支持加密和服务器认证;</li>
- <li>Wt满足低带宽下HTTPS持续使用的各种需求(细粒度Ajax);</li>
- <li>Wt提供内置跨站脚本(XSS)保护,通过预先过滤掉渲染文本中的恶意代码,
- 使Wt应用免受XSS的攻击;</li>
- <li>Wt应用能够对跨站请求伪造(CSRF)有一定的防护,因为用于会话跟踪的
- Cookies是可选的,即使是如此,Cookies也永远不会严格依赖于触发事件处理代码
- 的请求;</li>
- <li>Wt对跳过特定URL而对应用逻辑的破坏也有一定的防护,因为只有界面
- 明确的事件才会被触发;</li>
- </ul>
- <h4>对象关系映射库</h4>
- Wt提供了Wt::Dbo,这是Wt自带的一个库,实现了对象关系映射,Wt::Dbo为C++
- 应用程序与SQL数据库之间的提供了一种方便的处理方法。虽然我们说Wt::Dbo拥有的
- 一些特点,如最佳并发控制等,使这一技术成为数据库驱动的Web应用的理想选择
- (当然与Wt的MVC框架结合最佳),但我们还要说Wt::Dbo还可以被用在离线应用
- 或其他非Wt的应用中。
- Wt的ORM库(教程参见<a
- href="//www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">此处</a>)
- 有如下特点:
- <ul>
- <li>没有所谓代码生成、没有宏、没有XML配置,仅面向C++!</li>
- <li>使用模板化的访问者模式,该模式要求单一模版方法以提供映射,也就是
- 常说的“不要重复”(DRY)或尽最大可能高效!</li>
- <li>在该库中,你可以指定代理自增键,或映射任意C++类型的自然键,当然也
- 可以是组合类型(例如,当需要不止一个数据库字段时);</li>
- <li>支持<a
- href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">
- 最佳并发控制</a>(利用版本字段)</li>
- <li>Dbo支持多对一和多对多关系到标准模板库(兼容)集合的映射</li>
- <li>支持模式生成(即数据定义语言DDL)和CRUD操作(即数据操作语言DML);</li>
- <li>Dbo使用了预备语句;</li>
- <li>每个会话都会追踪脏对象并提供第一层缓存;</li>
- <li>提供灵活的、针对单个字段、对象以及他们组合(使用Boost.Tuple)的查询;</li>
- <li>使用单个连接或多个会话间共享连接池,这些连接只有当交互处于活动状态时
- 才被使用;</li>
- <li>Dbo默认支持Sqlite3和PostgreSQL后端,同时<a
- href="http://wtdbomysql.sourceforge.net/">MySQL后端(GPL协议)</a>
- 正由社区爱好者开发和维护(作者Paul Harisson)。</li>
- </ul>
- <h4>测试</h4>
- Wt使用事件处理代码构建和操作widget树,因此这很容易使用测试代码检查,
- 所以Wt的<a href="
- http://webtoolkit.eu/wt/doc/reference/html/classWt_1_1Test_1_1WTestEnvironment.html">
- 测试环境</a>允许你的应用实例化,且允许在没有浏览器的情况下模拟事件处理,
- 这样我们可以缩减底层请求/应答循环的测试环节。
- <h4>部署方式</h4>
- <p>
- Wt库将不同的部署选项抽象为连接器库,连接器库将Wt连接到不同的外部环境,
- 选择部署方式(选项)其实就是将Wt应用连接或重连接到某个连接库上。
- </p>
- <h5>a) 内置httpd部署</h5>
- <ul>
- <li>该模式下Wt是简单、且适合于基于C++ asio库的高性能Web应用服务器
- (支持多线程、异步输入输出);</li>
- <li>既支持HTTP,也支持OpenSSL下的HTTPS;</li>
- <li>支持应答分割与压缩;</li>
- <li>支持单一进程(方便部署和调试),也方便嵌入已有应用;</li>
- <li>支持通过代理或为了均衡负载的web服务器端部署;</li>
- <li>既可以部署于UNIX平台、又可部署于Win32。</li>
- </ul>
- <h5>b) FastCGI部署</h5>
- <ul>
- <li>该模式能与多数通用web服务器(如apache, lighttpd)整合在一起;</li>
- <li>提供不同的会话-进程映射策略;</li>
- <li>支持热部署,即新会话使用新的应用版本,同时部署时未终止的旧会话仍可以
- 按旧的应用版本继续运行;</li>
- <li>该模式仅用于UNIX平台。</li>
- </ul>
- <h5>c) ISAPI部署</h5>
- <ul>
- <li>该模式整合了Microsoft IIS服务器;</li>
- <li>使用ISAPI异步API使性能最大化;</li>
- <li>仅用于Win32平台。</li>
- </ul>
- </message>
- <message id="home.examples">
- <h3><span>示例</span></h3>
- <p>欢迎浏览Wt的一些在线示例。</p>
- <p>
- 这些示例的源代码均包含在Wt的源代码发行包中。你可以通过每个示例下的
- <a href="#/src">源代码浏览器</a>查看。
- </p>
- <p>
- 示例源代码也以交叉链接的形式出现在
- <a href="//www.webtoolkit.eu/wt/doc/examples/html/modules.html" target="_blank">
- Wt示例doxygen文档中</a>(自动开启新窗口)。
- </p>
- </message>
- <message id="home.examples.hello">
- <div>
- <h4 class="example">Hello world!</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/hello/hello.wt" class="run" target="_blank">
- <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
- </a>
- </p>
- <p>这个简单的例子展示了Wt的基本概念:</p>
- <ul>
- <li>
- 如何创建一个最小的Wt应用,如何使用<b>WRun()</b>启动web服务器,以及
- 如何创建一个新的<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html"
- target="_blank">WApplication</a>实例(新会话);
- </li>
- <li>
- <b>如何创建widgets</b>,以及如何将其添加到<b>widgets树</b>;
- </li>
- <li>
- 如何使用<b>信号/槽</b>机制对事件做出反应;
- </li>
- <li>
- 如何读取用户输入和更新widgets树。
- </li>
- </ul>
- <p>对hello world示例的完整阐述请参见由Victor Venkman撰写的<a
- href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/"
- target="_blank">Wt介绍</a>(可能有点过时)。
- </p>
- </div>
- </message>
- <message id="home.examples.wt">
- <div>
- <h4 class="example">Wt网站示例</h4>
- <p>Wt首先为己所用了,本网站自身即是一个Wt应用实例。 </p>
- <p>
- 虽然不是一个交互性很强的应用,但Wt的网站不仅展示了Wt如何实现高度交互的Ajax应用,
- 同时说明Wt适合于内容驱动的网站建设。Wt为纯HTML会话和Ajax提供良好的URL支持,
- 这允许浏览器导航、书签等操作,还有利于搜索引擎优化。另外,Wt使用<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WViewWidget.html">WViewWidget</a>
- 来最小化服务器端内存使用以提高应用的规模。
- </p>
- <p>
- 导航功能由<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WMenu.html"
- target="_blank">WMenu</a>和<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTabWidget.html"
- target="_blank">WTabWidget</a>提供。这些widgets分享了共同的特性集。
- 对于Ajax会话,他们均支持导航条目关联内容的<b>预先载入</b>和<b>滞后载入</b>,
- 同时可以针对不同子条目分别<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WMenu.html#d7840197cc0caf0430792b9f4a0df60d"
- target="_blank">指定载入模式</a>。
- 需要说明的是,预先载入不会增加载入时间,因为Wt渲染引擎总是首先传输可见的
- widget和某些变化,以此来优化应答时间。不可见部分(如其他预先载入的导航子项目的内容)
- 则进行隐式传输,而且这种传输是在渲染可见部分完成之后进行。
- </p>
- <p>
- 菜单导航栏部分采用C++无状态槽,其实现结果是<b>客户端</b>事件处理。
- </p>
- <p>
- WMenu的<b>内部路径</b>特点允许为每个菜单条目生成URL,
- 这可以用于形成浏览器历史记录和书签操作。当用户通过历史记录浏览时,
- 应用可以通过监听WApplication对象的
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html#41c9bda19b28526e47e70b1b6045e7cf">
- 内部路径变化信号(internalPathChanged)</a>,直接引起菜单条目指向内容的变化。同样地,
- 当用户将一个URL加入书签中,并在日后重新访问时,widgets将读取该URL初始的内部路径,并创建
- 相应的内容以显示。
- </p>
- <p>
- 虽然说Wt占用很小的服务器CPU使用,但它确实也需要一部分内存来保持widget状态。当然,如果
- 我们能够提供足够的内存(和交换空间),这将不成问题。另外,由于Wt网站部署在虚拟专用服务器
- (VPS)上,所以我们对此非常小心,并通过
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WViewWidget.html">WViewWidget</a>
- 尽可能地减小服务器资源使用。
- </p>
- </div>
- </message>
- <message id="home.examples.treeview">
- <div>
- <h4 class="example">树视图</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/treeview-dragdrop/treeview-dragdrop.wt" class="run" target="_blank">
- <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
- </a>
- </p>
- 该示例展示了Wt的视图(WTreeView、WTableView和PieChart)和数据模型等相关功能。
- <ul>
- <li>
- 该示例使用了<a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html"
- target="_blank">WTreeView</a>
- 和<a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
- target="_blank">WTableView</a>在树或表中渲染模型数据;
- </li>
- <li>
- 使用了<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSortFilterProxyModel.html"
- target="_blank">WSortFilterProxyModel</a>
- 来实现别一个模型数据的排序和过滤;
- </li>
- <li>
- 该示例还展示如何实现选中条目的拖放效果;
- </li>
- <li>
- 使用了可嵌套的布局管理器(水平方向和垂直方向的
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WBoxLayout.html" target="_blank">
- WBoxLayout</a>)来实现自动填充的布局;
- </li>
- <li>
- 展示了如何使用模态
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WDialog.html"
- target="_blank"> WDialog</a>显示一个简单的表单,示例中表单使用了
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WGridLayout.html"
- target="_blank">WGridLayout</a>作为布局管理器;
- </li>
- <li>
- 展示了如何使用基于上下文的
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPopupMenu.html" target="_blank">
- WPopupMenu</a>。
- </li>
- </ul>
- </div>
- </message>
- <message id="home.examples.chart">
- <div>
- <h4 class="example">图表</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/charts/charts.wt" class="run" target="_blank">
- <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
- </a>
- </p>
- <p>该示例展示了<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/group__charts.html" target="_blank">Wt
- 的图表widgets</a>,这些widgets基于Wt的跨浏览器绘图API实现。
- 绘图API使用了内置于浏览器的高质量图形支持(注意:不是利用传统的在服务器端
- 渲染PNG/GIF图像的方法),主要依赖浏览器的内联VML、内联SVG、HTML 5画布或
- PNG图像等将绘制内容渲染于<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPaintedWidget.html"
- target="_blank">WPaintedWidget</a>。
- </p>
- <p>该示例同时展示了Wt的MVC框架,包括
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
- target="_blank">表视图</a>和图表所基于的
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel.html"
- target="_blank">数据模型</a>。Wt采用这种方式,能够将数据模型的每个变化自动
- 反应于视图的更新中。当然,数据模型可以是字符串、数值或者
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WDate.html"
- target="_blank">日期型</a>。你可以通过编辑表视图的数据来直接观察以上动作机制。
- </p>
- <p>最后,我们还可以知道如何使用多项输入widgets、如何对输入的变化做出反应、
- 如何设置和读取选项的内容、以及如何使用
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WComboBox.html"
- target="_blank">WComboBox</a>与MVC数据模型关联,在以上背景下,Wt库实现了数据
- 在浏览器端和服务器端的同步。</p>
- </div>
- </message>
- <message id="home.examples.git">
- <div>
- <h4 class="example">Git查看器</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/gitmodel/gitview.wt" class="run" target="_blank">
- <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
- </a>
- </p>
- <p>
- 该示例展示了如何为Wt的MVC视图类(如
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html" target="_blank">
- WTreeView</a>)实现定制数据模型。
- </p>
- <p>
- Wt提供了
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WStandardItemModel.html"
- target="_blank">WStandardItemModel</a>,该类可以被填充以数据
- (如由数据库获得),其缺点是所有数据存储在内存中且须提前获取。但是,
- 通过重新实现<a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel.html"
- target="_blank">WAbstractItemModel</a>,我们可以实现另一类数据模型,即
- 仅在需要时获取数据,这就提供了一种数据载入与数据存储的平衡。
- 该示例中,我们实现了树模型,该树可在<a href="http://git-scm.com/">
- git仓库</a>的修改中导航。该模型将文件夹节点标识符滞后存储在内存中,
- 以生成每个文件夹的唯一ID。最初,我们认为可以使用SHA-1 ID,但具有相同
- 内容、在git仓库不同位置的文件夹却具有相同的SHA-1 ID,而我们又想采用
- 不同的<a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WModelIndex.html"
- target="_blank">模型索引</a>来表达,因此采用了上面的方法。
- </p>
- </div>
- </message>
- <message id="home.examples.composer">
- <div>
- <h4 class="example">邮件编辑器</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/composer/composer.wt" class="run" target="_blank">
- <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
- </a>
- </p>
- <p>
- 该示例实现了一个酷似GMail的邮件编辑器,除此还展示了如何轻松实现文件异步上传。
- </p>
- <ul>
- <li>
- 其中<i>ContactSuggestions</i>类提供了“收件人”、“抄送”、“密送”地址的
- 自动补全功能,该类继承自
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSuggestionPopup.html"
- target="_blank">WSuggestionPopup</a>类,此类使用了诸多
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1JSlot.html"
- target="_blank">JSlot</a>对象。对这些槽,客户端JavaScript事件处理代码
- 由开发者自定义的JavaScript决定(这不同于无状态槽中客户端JavaScript
- 代码由第一次调用时“学习”得到的方式)。Wt采用这种方式,弹出的可能适合
- 的联系人列表的排序完全由客户端决定。注意:建议框中的联系人是在背景中
- 自动传递的,原因很简单,因为他们是不可见的。
- </li>
- <li>
- 其中的<i>AttachmentEdit</i>展示了
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WFileUpload.html"
- target="_blank">WFileUpload</a>的使用,该类允许
- <b>文件的异步传输</b>,也就是说我们可以实现编辑邮件内容的同时上传附件。
- </li>
- <li>
- 其中的<i>Option</i>和<i>OptionList</i>类展示了无状态槽是如何在行为不完全
- 是无状态的情况下使用的。在这种情况下,一个Option的隐藏影响了临近可见Option:
- 即只有当存在某个临近选项时,一个选项才需要分隔线。当状态变化后,通过
- <b>使无状态槽的实现失效</b>,我们仍能够使用无状态槽的实现,并体验到
- 客户端事件处理的高效!
- </li>
- </ul>
- </div>
- </message>
- <message id="home.examples.chat">
- <div>
- <h4 class="example">简单聊天示例</h4>
- <p>
- <a href="//www.webtoolkit.eu/wt/examples/simplechat/simplechat.wt" class="run" target="_blank">
- <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
- </a>
- </p>
- <p>
- 该示例实现了一个简单的、多用户的聊天应用,它展示了Wt中如何轻松地让多个用户
- 即时互动,这里即用到<b>服务器端初始更新</b>将信息由一个用户推向其他用户。
- </p>
- <p>
- 该示例还向你展示了基于类的web开发方法的良好效果,在这种方法中,你可以轻松实现
- 对同一widget的多次实例化,示例中的SimpleChatClient widget就可以象使用Wt基本类
- (如按钮)一样,轻松实例化。
- </p>
- <p>
- 象聊天这样的一些交互应用,可以允许用户传输HTML文本给其他用户,众所周知,这非常
- 容易引起<b>跨站脚本攻击(XSS)</b>,因为用户可以不被限制地输入恶意代码(javascript)并作为
- 其发出文本的一部分。当对应用户渲染收到的文本时,它可能将从该用户(如浏览器
- cookies)获得的一些隐私信息发送出去。Wt则完全阻止了这样的进攻,同时不会给开发者带来
- 负担,因为象WText这样的widgets自然保证了所显示的只有安全文本(passive text),自动
- 舍弃任何严格意义上不是文本的东西。
- </p>
- </div>
- </message>
- <message id="home.examples.widgetgallery">
- <div>
- <h4 class="example">Widget展示库</h4>
- <p>
- <a href="//www.webtoolkit.eu/widgets" class="run" target="_blank">
- <img src="icons/green-play.png" style="vertical-align: top"/>前往widget展示库
- </a>
- </p>
- <p>
- 该示例展示了Wt中大部分widget,另外还展示了相应的事件处理、布局类等。
- 这可以作为Wt库中可执行的widget及其相关特性的参考,是有一定帮助作用的。
- </p>
- </div>
- </message>
- <message id="home.download">
- <h3><span>下载</span></h3>
- </message>
- <message id="home.download.license">
- <h4>许可</h4>
- <p>Wt可以在GNU通用公共许可(GPL)或商业许可下使用。</p>
- <p>如果你希望在<b>GPL</b>下使用Wt库,那么你可以以任何目的创建web应用,
- 并部署在你自己的intranet或Internet服务器上,而没有必须开放源代码的要求。
- </p>
- <p>注意,根据GPL条款规定,如果你正以二进制形式将你的web应用转给其他方使用,
- 其方式或为销售,或免费提供,此时你必须在发布版上附带程序源代码;同时,这
- 一要求亦适用于针对Wt库原始形式或修改形式的再发布。
- </p>
- <p>所谓<b>商业许可</b>则没有以上限制,具体请访问我们的
- <a href="//www.emweb.be/?page=license-wt">许可信息</a>
- 页面,以获得对许可条款、售价、订购的具体要求。
- </p>
- <p>注:网站所有中译文,特别是与法律许可等相关的内容最终以英文为准。
- </p>
- <p>同时,你还可以直接从Wt库作者处获得
- <a href="//www.emweb.be/services">支持与培训</a>。
- </p>
- </message>
- <message id="home.download.packages">
- <h4><span>可用版本</span></h4>
- </message>
- <message id="home.download.version"><b>版本</b></message>
- <message id="home.download.date"><b>日期</b></message>
- <message id="home.download.description"><b>描述</b></message>
- <message id="home.download.other">
- <h4>Wt库安装器:winst <span class="emph">(new!)</span></h4>
- 如果你现在对Wt特别好奇,想尝试一下,但是你的系统或发行版还没有提供
- 最新的升级包,那么这个安装器可能非常适合你。这个安装器将下载并将Wt
- 安装在<b>类UNIX环境</b>下,同时提供了用于运行示例的脚本。
- <p>
- Wt安装器需要<tt>CMake</tt>和<tt>GNU make</tt>,同时可能会通过<tt>wget</tt>
- 下载软件。
- </p>
- <p>
- 下载该软件包
- (<a href="//www.webtoolkit.eu/packages/winst-0.3.tar.gz">winst-0.3.tar.gz</a>)
- 或者直接获得最新的 git 版本:
- <div class="fragment">
- <pre class="fragment">$ git clone git://github.com/kdeforche/winst.git</pre>
- </div>
- </p>
- <h4>系统需求</h4>
- 为了能够编译和安装最新版的Wt库,你至少需要安装以下两个包:
- <ul>
- <li><a href="http://www.cmake.org/">CMake</a> 交叉平台make配置工具<br />
- 建议 CMake >= 2.6(尽管2.4也能工作)。
- </li>
- <li>
- 必不可少的<a href="http://www.boost.org/">
- boost C++ 库</a>: boost-1.36 或更高版本。 <br />
- 下面的boost库需要安装(不只是头文件):
- <tt>boost_date_time</tt>、<tt>boost_regex</tt>、
- <tt>boost_program_options</tt>、<tt>boost_signals</tt>、
- <tt>boost_system</tt>和可选的(但强力推荐)
- <tt>boost_thread</tt>。
- </li>
- </ul>
- 下面的包是可选的,但如果能有可以体验到更多的Wt特性:
- <ul>
- <li><a href="http://www.postgresql.org/">PostgreSQL</a>:如果安装上,那么
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1Dbo_1_1backend_1_1Postgres.html">postgres
- 连接器</a>将会为实现ORM库(<a href="//www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">Wt::Dbo</a>)
- 而被编译;</li>
- <li><a href="https://github.com/libharu/libharu/wiki">libharu</a>:如果安装上,那么
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPdfImage.html">WPdfImage</a>绘图设备
- 将被编译,这样就能够将图片整合进PDF文件或作为PDF文件处理;</li>
- <li><a href="http://www.graphicsmagick.org/">GraphicsMagick</a>:如果安装上,那么
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WRasterImage.html">WRasterImage</a>
- 绘图设备将被编译,这样就能够在光栅扫描图像(PNG或GIF)上绘图了;</li>
- </ul>
- <p>其他必需部分依赖于你所选择的连接器支持,连接器是能够实现你的Wt应用与浏览器通讯的工具:</p>
- <h5>对于FastCGI(限于Unix):</h5>
- <ul>
- <li>Apache 1 或 2,或其他支持FastCGI协议的web服务器</li>
- <li>
- <a href="http://www.fastcgi.com/#TheDevKit">FastCGI开发工具包</a>
- :fcgi-2.4.0
- </li>
- <li>
- 使用apache时:
- Apache <a href="http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz">mod_fastcgi</a>:
- mod_fastcgi-2.4.x.<br />或者也可以使用
- <a href="http://httpd.apache.org/download.cgi#mod_fcgid">mod_fcgid</a>:
- mod_fcgid-2.3.5。
- </li>
- </ul>
- <h5>对于内置 httpd(wthttpd):</h5>
- <ul>
- <li>内置httpd需要boost asio C++ 库(仅包含头文件的库);</li>
- <li>可选的:libz(用于HTTP压缩)和openssl(用于HTTPS支持);</li>
- </ul>
- <h5>对于ISAPI(限于Win32):</h5>
- <ul>
- <li>ISAPI连接器只有配合MS IIS服务器才能部署Wt应用。</li>
- </ul>
- 你可以依照<a
- href="//www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">安装指南
- </a>编译Wt并运行相关示例,或者如果你的运行平台包含在列表
- <a href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">平台相关安装指南</a>
- 中的话,也可参照执行。
- <h4>Git仓库</h4>
- <p>如果你希望跟踪最新的变化,或者参与到Wt的开发中,你可能希望使用git仓库。</p>
- <p>
- 检出操作:
- <div class="fragment">
- <pre class="fragment">$ git clone git://github.com/kdeforche/wt.git</pre>
- </div>
- </p>
- </message>
- <message id="home.community">
- <h3><span>社区</span></h3>
- <h4>作者</h4>
- <p>
- Wt最初由<a
- href="mailto:koen@emweb.be">Koen Deforche</a>开发,目前由
- <a href="//www.emweb.be/">Emweb bvba</a>公司维护。</p>
- <p>我们非常感谢以下开源项目(代码借鉴):</p>
- <ul>
- <li>Wt内置的httpd基于<a
- href="http://asio.sourceforge.net/">asio C++库
- </a>的一个示例开发,该库由Christopher M. Kohlhoff开发(遵循<a
- href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>);</li>
- <li>Wt的<a href="http://threadpool.sourceforge.net/">Thread pool</a>
- 实现来自于Philipp Henkel(遵循<a
- href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>);</li>
- <li>Wt的<a href='http://rapidxml.sourceforge.net/'>RapidXML</a>
- 库由Marcin Kalicinski开发(遵循<a
- href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>)。</li>
- </ul>
- <h4>Wiki</h4>
- <p>
- <a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a>
- 由社区维护,包括很多有用信息,如针对不同Linux发行版的安装说明等。
- </p>
- <h4>支持</h4>
- <p>你可以直接从Wt库作者处获得
- <a href="//www.emweb.be/services">支持与培训</a>
- </p>
- <p>另外,你还可以从我们的<a
- href="http://redmine.webtoolkit.eu/projects/wt/boards">社区论坛
- </a>获取帮助, 当然还有<a
- href="mailto:witty-interest@lists.sourceforge.net">邮件列表</a>
- (<a
- href="http://lists.sourceforge.net/lists/listinfo/witty-interest">
- 如何加入</a>),你可以通过<a
- href="http://gmane.org/info.php?group=gmane.comp.web.witty.general">Gmane
- gateway</a>搜索或浏览邮件列表存档内容(向建立者 Pau Garcia i Quiles 致敬)
- </p>
- <h4>贡献</h4>
- <p>Wt的开发得到以下公司或组织的资助:</p>
- <p>
- <table>
- <tr>
- <td class="sponsor-logo"><a href="//www.emweb.be/">
- Emweb bvba</a>
- </td>
- <td class="sponsor-role">
- Wt创建者、官方维护者以及相关支持的提供者
- </td>
- </tr>
- <tr>
- <td class="sponsor-logo">
- <a href="http://www.eurofer.be/">
- Eurofer</a>
- </td>
- <td class="sponsor-role">
- Wt图表库、WTreeView、及分层数据模型等开发的资助者
- </td>
- </tr>
- </table>
- </p>
- <p>我们欢迎用户为Wt献计献策,这可能包括某些widgets的小补丁、
- widget集以及Wt核心性能提高等。</p>
- <p>然而,由于Wt采用开源与商业双重许可,并将Wt作为一个整体在法律上予以保护,
- 即将Wt作为一个实体,而对于每个部分的版权不予考虑,因此我们在接受用户贡献之前
- 要求贡献者将版权指认给<a href="//www.emweb.be/">Emweb</a>。
- </p>
- <p>注:网站所有中译文,特别是与法律许可等相关的内容最终以英文为准。
- </p>
- <h4>翻译</h4>
- Wt网站的中文翻译工作由中央民族大学宋志民协助完成。
- <h4>Sourceforge</h4>
- <a href="http://sourceforge.net"><img src="https://sflogo.sourceforge.net/sflogo.php?group_id=153710&type=1" style="vertical-align:middle" width="88" height="31" border="0" alt="SourceForge.net Logo" /></a>
- Wt在Sourceforge的主页请点击<a href="http://sourceforge.net/projects/witty/">此处</a>。
- </message>
- <message id="home.other-language">
- <h3><span>!C++ ?</span></h3>
- <p>你是否喜欢Wt库的功能,但又不太倾向于C++编程?</p>
- <p>不要失望,Wt还有其他语言的原生变体或可与其他语言绑定使用:
- <ul class="languages">
- <li>
- <div>
- <img class="java-language-icon" src="icons/java-logo.png" alt="Java"></img>
- 你可以使用我们的<a href="/jwt">JWt</a>,JWt是Wt原生的<b>Java</b>版。JWt
- 与Wt同时开发与维护,虽然他们之间有些许差异,但功能和特点几乎相同。JWt可以
- 运行在JVM中,并可以部署于任何Servlet内。
- </div>
- <br style="clear: both" />
- </li>
- <li>
- <div>
- <img class="language-icon" src="icons/ruby-logo-R.png" alt="Ruby"></img>
- Richard Dale 正在开发和维护
- <a href="http://github.com/rdale/wtruby/tree/master">WtRuby</a>,也就是将
- <b>Ruby</b>绑定到Wt,WtRuby实施原理与将Ruby绑定到Qt和KDE相同。
- </div>
- <br style="clear: both" />
- </li>
- <li>
- <div>
- <img class="language-icon" src="icons/clojure-logo.png" alt="Clojure"></img>
- 为了达到JVM对其他语言的支持,Raphael Bauduin正在实验<a
- href="http://www.nsa.be/index.php/eng/Blog/Using-Jwt-yes-it-s-a-J-with-Clojure">
- 从<b>Clojure</b>(LISP变体)中使用JWt</a>,链接中记录了他的实验过程,该项目最终
- 将开发出一个小型支持库。
- </div>
- <br style="clear: both" />
- </li>
- </ul>
- </p>
- </message>
- <message id="home.documentation">
-
- <h3><span>文档</span></h3>
- <h4>编译和安装</h4>
- <p>
- 通用安装指南(UNIX)请点击
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">此处</a>,此文档也可
- 在源文件包中找到,分别为INSTALL或INSTALL.html文件。</p>
- <p>
- 另外,<a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a> 还有一部分涉及到
- <a href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">平台相关安装说明</a>。
- </p>
- <h4>介绍和入门</h4>
- <ul>
- <li>请参考我们的<a
- href="//www.webtoolkit.eu/doc/Wt-WhitePaper.pdf">白皮书</a>以了解使用Wt较之于其他传统web开发框架的好处。
- </li>
- <li>Dr Dobbs Journal上有一篇很好的<a href="http://www.ddj.com/cpp/206401952">
- 介绍性文章</a> (2008年2月)。</li>
- <li>Wt参考手册中包含一篇
- <a href="//www.webtoolkit.eu/wt/doc/reference/html/overview.html">Wt库概览
- </a>,这是一篇很好的入门文章。</li>
- <li>Software Developers Journal上有一篇入门性文章(
- <a href="//www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.xhtml">在线阅读</a>,
- <a href="//www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.pdf">PDF版</a>)
- (写于2006年4月,稍微有点过时),
- 这篇入门文章使用了Hangman猜词游戏示例的代码(也可参看源文件)进行介绍。
- </li>
- <li>Victor Venkman所写的
- <a href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/">Wt介绍</a>中,对
- <a href="#/wt/examples/">hello world 示例</a>进行了评测。
- </li>
- </ul>
- <h4>参考手册</h4>
- <p><a href="//www.webtoolkit.eu/wt/doc/reference/html/index.html"
- target="_blank"> Wt参考手册</a>(在新窗口中开启)直接由doxygen从源码中生成,
- 手册中也包含了关于树表示例的入门教程,特别是针对无状态槽的实现机制进行了
- 说明,另外还强调了Wt允许客户端代码在事件处理中可进一步优化的一些高级特性。
- </p>
- <h4>注释性示例</h4>
- <p>示例的源码级文档也已经制作完成,<a href="//www.webtoolkit.eu/wt/doc/examples/html/modules.html"
- target="_blank">在此查看</a>(新窗口中打开)。</p>
- <h4>Wiki</h4>
- <p>由社区维护的<a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a>也可以查看,里面有
- 很多有用信息,比如FAQ和一些技巧等。
- </p>
- </message>
- <message id="srcview.title.CPP.">
- <div class="srcviewtitle">
- <h2>Wt示例源代码</h2>
- <p>
- 浏览<a href="//www.webtoolkit.eu/wt">Wt</a>中所有示例的源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.">Wt示例</message>
- <message id="srcview.title.CPP.hello">
- <div class="srcviewtitle">
- <h2><i>Hello world</i>示例源代码</h2>
- <p>
- 浏览以下
- <a href="#/cn/examples/hello_world">
- Hello world</a>示例源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.hello">示例:Hello world</message>
- <message id="srcview.title.CPP.charts">
- <div class="srcviewtitle">
- <h2><i>图表</i>示例源代码</h2>
- <p>
- 浏览以下
- <a href="#/cn/examples/charts">
- 图表</a>示例源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.charts">示例:图表</message>
- <message id="srcview.title.CPP.treeview-dragdrop">
- <div class="srcviewtitle">
- <h2><i>树视图</i>示例源代码</h2>
- <p>
- 浏览以下
- <a href="#/cn/examples/treeview">
- 树视图</a>示例源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.treeview-dragdrop">示例:树视图</message>
- <message id="srcview.title.CPP.composer">
- <div class="srcviewtitle">
- <h2><i>邮件编辑器</i>示例源代码</h2>
- <p>
- 浏览以下
- <a href="#/cn/examples/composer">
- 邮件编辑器</a>示例源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.composer">示例:邮件编辑器</message>
-
- <message id="srcview.title.CPP.wt-homepage">
- <div class="srcviewtitle">
- <h2><i>Wt网站</i>示例源代码</h2>
- <p>
- 浏览以下
- <a href="#/cn/examples/wt-homepage">
- Wt网站</a>示例源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.wt-homepage">示例:Wt网站</message>
- <message id="srcview.title.CPP.gitmodel">
- <div class="srcviewtitle">
- <h2><i>Git查看器</i>示例源代码</h2>
- <p>
- 浏览以下
- <a href="#/cn/examples/gitmodel">
- Git查看器</a>示例源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.gitmodel">示例:Git查看器</message>
- <message id="srcview.title.CPP.simplechat">
- <div class="srcviewtitle">
- <h2><i>简单聊天</i>示例源代码</h2>
- <p>
- 浏览以下
- <a href="#/cn/examples/simplechat">
- 简单聊天</a>示例源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.simplechat">示例:简单聊天</message>
- <message id="srcview.title.CPP.widgetgallery">
- <div class="srcviewtitle">
- <h2><i>Widget展示库</i>示例源代码</h2>
- <p>
- 浏览以下
- <a href="#/cn/examples/widgetgallery">
- Widget展示库</a>示例源代码。
- </p>
- </div>
- </message>
- <message id="srcview.title.widgetgallery">示例:Widget展示库</message>
- </messages>
|