wxWidgets谁刚开始学习指南(5)——使用wxSmith可视化设计
5 用wxSmith进行可视化设计
依照第4章的要求看过了相关的书籍。应该具备了通过直接写代码的方式界面程序的能力。
而在实际的project开发中,做界面的工作常通过可视化的操作完毕。wxSmith就是这样一个支持wxWidgets高速开发的一个工具,专门用来做界面。
wxSmith已经是Code::Blocks的一个标准配置。在Code::Blocks菜单中能够看到这一项。
这一章,我们将从做一个应用程序開始。应用程序的窗体中有两个button,按SayHellobutton,屏幕上会出现“Hello World”。按Quitbutton,程序将结束。
5.1 用wxSmith创建应用程序的外观
创建一个空项目。名称为plain。
选择菜单wxSmith -> Add wxFrame。将要建立的Frame命名为plainFrame。
在左側的Management窗体中,显示Resources页签。我们看到的界面例如以下图所看到的:
窗体中由很多小点构成的部分,就是将来应用程序的界面部分,我们称之为“设计区”。
在整个窗体的左下方,是“属性/事件”窗体,被称为“属性编辑区”在当中能够设置属性。以及增加响应“OnClick”之类事件的代码。点击靠左的显示和设置“属性”。而右边的显示和设置“事件”(如今动手试一下)。
如今仅仅看到整个Frame的属性和事件。我们做些改动。
比如。将Default size属性后面的“√”取消掉,将随后的Width和Height分别设置为400和200。
再将用来设置窗体标题栏的title属性改变为“Hello world”,例如以下图所看到的:
点击设计区右方的show preview图标,能够看到当前设置好的窗体。可见所做设置起了作用。例如以下图:
在设计区下方,有一排小button,用于向窗体中插入“控件”,例如以下图,用鼠标在其上滑过,能够看到其名称。如wxBitmapButton、wxPanel、wxStaticText、wxButton等。
可见。wxSmith提供了相当丰富的控件。
以下。向你的窗体中增加四个控件,各自是:1个wxPanel,1个wxStaticText,2个wxButton。增加时,在控件栏中点击控件,然后。到窗体中的合适位置再点一下,控件即被增加。
调整其位置。使看起来例如以下图所看到的:
逐个选择增加的控件。在“属性编辑区”观察并改变当中的部分属性:
- 静态文本框:其Identifier属性是ID_STATICTEXT1,将其Label属性中的值删除。
- button1:其Identifier属性是ID_BUTTON1,将其Label属性中的值改为&SayHello。
- button2:其Identifier属性是ID_BUTTON2。将其Label属性中的值改为&Quit。
再点击设计区右方的show preview图标,观察设计好的窗体,例如以下所看到的:
5.2 为控件增加事件处理程序
应用程序中。须要为button设置OnClick事件,决定事件发生时要做的“动作”。也即要定义事件响应函数。
做法是,选中Quitbutton。在“属性编辑区”点击靠右边的button设置“事件”。
下图是初时的状态,--None--标示着如今还没有事件代码:
点击右边的向下三角。选择“--Add new handler--”,系统自己主动定义了一个函数体为空的函数:
void PlainFrame::OnButton2Click(wxCommandEvent& event)
{
}
如今须要做的。是增加退出程序须要的语句。
增加后函数是:
void PlainFrame::OnButton2Click(wxCommandEvent& event)
{
Close(true);
}
相同的方法。为SayHellobutton加上事件的处理,函数为:
void PlainFrame::OnButton1Click(wxCommandEvent& event)
{
if(StaticText1->GetLabel().Contains(wxT("world")))
StaticText1->SetLabel(StaticText1->GetLabel() + wxT(" again"));
else
StaticText1->SetLabel(wxT("Hello world"));
}
在整个应用程序的开发工作即将结束之际。我们能够完整观察一下已经开发出的程序。
在Code::Blocks左側的Management窗体中。选择Projects页签。打开项目的Sources,即源程序部分的PlainFrame.cpp,以及Headers部分的PlainFrame.h,能够看到的程序的全貌,如上图所看到的。
原来,前面利用wxSmith的全部设计,其结果都转变为了在前几章在看的代码。
wxSmith利用可视化的界面,是在为我们自己主动生成程序!
这时候编译程序,假设有错误,參考3.1.2小节的处理方式,改动程序或配置环境。
最后。应该仅仅有一个错误:undefined reference to `WinMain@16'。
注意到此时的程序,仅仅是定义了窗体类,还缺少整个程序的主控部分。仿照在《wxWidgets tutorial》中见过的无数样例,在项目中增加以下的两个文件:
main.h
#include <wx/wx.h> class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
main.cpp
#include "main.h"
#include "PlainFrame.h" IMPLEMENT_APP(MyApp) bool MyApp::OnInit()
{
PlainFrame *plainFrame = new PlainFrame(NULL);
plainFrame->Show(true); return true;
}
此时,能够让让执行程序了。
以下是程序执行期间的一个截图:
5.3 写代码与拖控件
用wxSmith能够帮助程序猿用可见的方式高速地做出应用程序的界面。一个问题是:p 这样的“自己主动化”的手段。是不是让第4章辛苦看书手写代码所花的功夫白费了?
这个观点有些道理。有些业内人士描写叙述他们的工作,就是拖控件。这样的话,C++程序猿说得少一些。用的开发工具越高级。越要这样说。
拖控件。也有水平高低,不必妄自菲薄。而确实,系统开发能力和水平。很多其它是在拖控件的背后。
第4章辛苦看书手写代码,是掌握wxWidgets构架的必要,是探知其根源的途径。
优秀程序猿要上得了厅堂(直接写代码),也下得了厨房(拖控件)。哪样方便哪样来。
以至于,拖控件解决不了的,就直接写代码完毕。
能拖控件的人多。能写代码的人相对少。
看第5章,不必等到第4章的功夫全然具备再说。而读完、练完了第5章,第4章一定要回头再好好看。
有了写代码能力的支撑,拖得一手好控件也有了保证。前面的Hello world仅仅是一个开端。还有非常多复杂的,也是构成良好交互功能的控件等着你拖好、用好。
5.4 深入wxSmith学习的建议
在http://wiki.codeblocks.org/index.php?title=WxSmith_tutorials 中提供了9个教程,英文版的。跟着做下去。会明确很多其它。用中学英语。非常划算的一件事情。
附件中的“WxSmith_tutorials.pdf”文档是这9个教程早期的一个版本号。能够离线读这个教程。
能够自拟些小题目开发一下。逐渐就能过渡到开发项目。
抛砖引玉,给几个小题目:
(1)设计GUI程序,计算a+b=?,參考界面例如以下,在前两个文本框中输入a和b,点击“计算”button后,在第3个文本框中出a+b的结果。
(2)用三个文本框输入一元二次方程的三个系数,解出方程的根。
能够定义一个一元二次方程类来解决有关的计算问题。
(3)不再写了。计算器、记事本、绘图板,适合的题目,多的是了。学会拟小题目,这也是课外自主学习能找到的感觉。
================= 迂者 贺利坚 CSDN博客专栏================= |
版权声明:本文博主原创文章。博客,未经同意不得转载。
wxWidgets谁刚开始学习指南(5)——使用wxSmith可视化设计的更多相关文章
- UI学习笔记---第十三天可视化设计 XIB, StoryBoard
一.XIB Xib是一种苹果提供的快速构建界面的编程方式,主要是为了简化MVC中的V的构建 Xib提供可视化的编辑界面,能大大提升页面布局效率 Xib常用操作 为控件关联事件 为空间指定delegat ...
- 《C/C++学习指南》 - 关于本书
称号 :<C/C++学习指南> 笔者: 邵制成 在线学习(免费),在线答疑 (免费) 创作目的:想以自己的能力和经验为国内(及国外)的读者奉献一本好书,一本让人一看就懂."不可能 ...
- shell学习指南-阅读笔记
shell学习指南真不是刚开始学习shell应该看得书,虽然其中讲了简单的linux命令,shell语法等,但是每章也有些深入和生僻地方,我想如果我刚学shell看到这样的地方一定会头疼的要死.或许也 ...
- 最棒的 JavaScript 学习指南(2018版)
译者注:原文作者研究了近2.4万篇 JavaScript 文章得出这篇总结,全文包含学习指南.新人上手.Webpack.性能.基础概念.函数式编程.面试.教程案例.Async Await.并发.V8. ...
- Java工程师学习指南 完结篇
Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...
- Vim 学习指南
作者:耀耀 出处:http://www.linuxeden.com/html/news/20130820/142667.html Vim 学习指南 来源:开源中国社区 作者:耀耀 关注我们: 你想 ...
- Java工程师学习指南(完结篇)
Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...
- Java工程师学习指南
java学习指南-四个部分:分别是入门篇,初级篇,中级篇,高级篇 第一步是打好Java基础,掌握Java核心技术, ...
- (转)2019年 React 新手学习指南 – 从 React 学习线路图说开去
原文:https://www.html.cn/archives/10111 注:本文根据 React 开发者学习线路图(2018) 结构编写了很多新手如何学习 React 的建议.2019 年有标题党 ...
随机推荐
- Leetcode 第 2 题(Add Two Numbers)
Leetcode 第 2 题(Add Two Numbers) 题目例如以下: Question You are given two linked lists representing two non ...
- cookie和session使用
cookie和session使用 一.总结 1.需要使用的场景:验证用户是否登录时 获取用户的用户名时 退出登录时 2.cookie和session在什么时候记录:在登录成功之后 二.cook ...
- maven 解决Cannot change version of project facet Dynamic web module to 2.5
我们用Eclipse创建Maven结构的web项目的时候选择了Artifact Id为maven-artchetype-webapp,由于这个catalog比较老,用的servlet还是2.3的,而一 ...
- 【例题 6-6 UVA - 679】Dropping Balls
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 直接模拟会超时. 根据奇偶的规律.直接判断会往哪里走就好. 每个二叉树的节点.必然是左边和右边走的次数对半分.->奇数左边多一 ...
- CSU1656: Paper of FlyBrother(后缀数组)
Description FlyBrother is a superman, therefore he is always busy saving the world. To graduate fro ...
- Android5.0(Lollipop) BLE蓝牙4.0+浅析demo连接(三)
作者:Bgwan链接:https://zhuanlan.zhihu.com/p/23363591来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Android5.0(L ...
- js进阶 12-7 如何知道你是从哪个元素移动到当前元素与事件调用时如何添加额外数据
js进阶 12-7 如何知道你是从哪个元素移动到当前元素与事件调用时如何添加额外数据 一.总结 一句话总结:event的relatedTarget属性和data属性. 1.如何知道你是从哪个元素移动到 ...
- linux下如何获取某一进程占用的物理内存和虚拟内存
首先,ps -A查看你所查看进程的进程号 ps -A 加入进程号为pid 那么使用如下脚本,可以打印该进程使用的虚拟内存和物理内存: root@Storage:/mnt/mtd# cat rss.sh ...
- [SCSS] Write similar classes with the SCSS @for Control Directive
Writing similar classes with minor variations, like utility classes, can be a pain to write and upda ...
- 用live555将内网摄像机视频推送到外网server,附源代码
近期非常多人问,怎样将内网的摄像机流媒体数据公布到公网,假设用公网与局域网间的port映射方式太过麻烦,一个摄像机要做一组映射,并且不是每个局域网都是有固定ip地址,即使外网主机配置好了每个摄像机的映 ...