这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
samsam598
Super wx Problem Solver
Posts: 340 Joined: Mon Oct 06, 2008 12:55 pm
Post
by samsam598 » Sat Aug 25, 2012 4:23 am
ywq111 wrote: 2.8是以前下的,另外足够下。
其实也没啥,我现在是练练手。 等真正做研发的时候,用最新的。
话说,以前没怎么学C++,有.net研发经历,不知道wxwidgets的内存问题怎么处理,会自动释放还是需要自己处理内存。
这块哪里有资料没?另外,怎么样在这块上手呢?
webkit,做浏览器用的吗? 暂时也这种需求。
用WX意味着用C++,C++ guru们认为C++(C)不同于其它,牛于其它语言的最突出的一点就是象上帝一样操作内存.所以俺觉得
基本功是最大的学习制高点,天资平庸如俺总是觉得基本功太差.
关于wx内存管理,还是推荐Julian Smart的那本书Cross Platform Programming With WxWidgets,第十五章.中英版到处都有得下.
Regards,
Sam
-------------------------------------------------------------------
Windows 10 64bit
VS Community 2019
msys2-mingw13.2.0 C::B character set: UTF-8/GBK(Chinese)
wxWidgets 3.3/3.2.4 Unicode Mono Static gcc static build
ywq111
Earned a small fee
Posts: 15 Joined: Tue Aug 21, 2012 12:27 pm
Post
by ywq111 » Sat Aug 25, 2012 11:25 am
makefile我倒是有点会修改了,稍会一点了。就是不怎么会编程。
多谢指教,我多编译一种看看。
我那个默认编译的,确实没有那个文件。
居然可以有附件?
我以为不可以上传附件呢。。。
kipade
Earned some good credits
Posts: 126 Joined: Fri Nov 11, 2011 2:45 am
Location: China
Post
by kipade » Wed Aug 29, 2012 3:26 am
我在Linux下试了,没有问题
wx版本2.9.4, wxSqlite3的版本3.3.0
wx的编译选项--with-gtk=3
(我机器装gtk3了)
然后,编译wxSqlite3的时候用直接用./configure29(如果和我一样使用gtk3的话,需要修改此脚本,加入WX_GTKOPT3选项即可,照WX_GTKOPT2的弄法)
建议楼主单步跟踪,查看内存
Slackware GNU/Linux x86_64
wxWidgets-3.3.0
ywq111
Earned a small fee
Posts: 15 Joined: Tue Aug 21, 2012 12:27 pm
Post
by ywq111 » Thu Aug 30, 2012 12:59 am
kipade wrote: 我在Linux下试了,没有问题
wx版本2.9.4, wxSqlite3的版本3.3.0
wx的编译选项--with-gtk=3
(我机器装gtk3了)
然后,编译wxSqlite3的时候用直接用./configure29(如果和我一样使用gtk3的话,需要修改此脚本,加入WX_GTKOPT3选项即可,照WX_GTKOPT2的弄法)
建议楼主单步跟踪,查看内存
我发现在windows下用sqlite3.exe自己导入生成的sqlite3数据库,然后读取时是空。
但是如果在wxsqlite3中直接用insert语句插入的,则可以读取。
比如同一个数据库,我用sqlite3.exe插入一条中文记录,此记录读取出来是空;同时使用wxsqlite3插入一条中文记录,wxsqlite3插入的能读取成功:
sqlite3.exe插入的记录,用sqlite3.exe查询是中文;但wxsqlite3插入的那条则显示为乱码。。。
到底怎么使用sqlite3呢?我有些迷糊了。同一个数据库,使用pragma encoding 语句查询显示为utf-8呀 。。。
ywq111
Earned a small fee
Posts: 15 Joined: Tue Aug 21, 2012 12:27 pm
Post
by ywq111 » Fri Aug 31, 2012 1:02 am
原因已经找到。
windows下:
sqlite3.exe 导入数据的时候,导入的来源CSV需要是utf-8的 ;否则,在sqlite3.exe中查询可以显示,但wxsqlite3读取则为空值。
导入的来源CSV是UTF-8时,WXSqlite3可以正常读取,但是使用sqlite3.exe查询则显示乱码。
以下是自己做的笔记【sqlite3导库与wxsqlite3中文相关】 :
Code: Select all
先运行如下命令创建数据库:
sqlite3.exe zl.db
创建数据表TDayInfo:
如格式为:GL(公历),ZL(藏历),Info(提示信息),以GL(公历)为主键
创建的相关的sql语句:
PRAGMA encoding="UTF-8";PRAGMA foreign_keys=OFF;
CREATE TABLE "TDayInfo" (
"GL" TEXT NOT NULL,
"ZL" TEXT,
"Info" TEXT,
PRIMARY KEY ("GL" ASC)
);
设置模式的命令为:
.mode csv (或者使用“ .separator "," ”指定分隔符为英文逗号)
导入数据说明:
其中rq.csv是以逗号分隔的csv文件,总共三行,包含中文字段,可从access中导出,或者从直接用文本编辑器编辑。
如需在wxsqlite3中使用,则rq.csv必须保存成utf-8编码——导入rq.csv后使用sqlite3.exe查询为乱码,但是使用wxsqlite3访问则可正常显示中文。
如rq.csv是ASCII编码,那么导入后,使用sqlite3.exe查询正常显示中文,但使用wxsqlite3访问则查出来为空值。
导入的命令为:
.import rq.csv TDayInfo
导入完成后就可以使用了。
退出命令:
.exit
Attachments
sqlite3DaoKu.zip
SQLite3导库与wxSqlite3中文相关 (279.37 KiB) Downloaded 570 times
maryjeck
In need of some credit
Posts: 4 Joined: Mon Jan 27, 2014 10:45 am
Post
by maryjeck » Mon Jan 27, 2014 10:55 am
ywq111 wrote: 原因已经找到。
windows下:
sqlite3.exe 导入数据的时候,导入的来源CSV需要是utf-8的 ;否则,在sqlite3.exe中查询可以显示,但wxsqlite3读取则为空值。
导入的来源CSV是UTF-8时,WXSqlite3可以正常读取,但是使用sqlite3.exe查询则显示乱码。
以下是自己做的笔记【sqlite3导库与wxsqlite3中文相关】 :
Code: Select all
先运行如下命令创建数据库:
sqlite3.exe zl.db
创建数据表TDayInfo:
如格式为:GL(公历),ZL(藏历),Info(提示信息),以GL(公历)为主键
创建的相关的sql语句:
PRAGMA encoding="UTF-8";PRAGMA foreign_keys=OFF;
CREATE TABLE "TDayInfo" (
"GL" TEXT NOT NULL,
"ZL" TEXT,
"Info" TEXT,
PRIMARY KEY ("GL" ASC)
);
设置模式的命令为:
.mode csv (或者使用“ .separator "," ”指定分隔符为英文逗号)
导入数据说明:
其中rq.csv是以逗号分隔的csv文件,总共三行,包含中文字段,可从access中导出,或者从直接用文本编辑器编辑。
如需在wxsqlite3中使用,则rq.csv必须保存成utf-8编码——导入rq.csv后使用sqlite3.exe查询为乱码,但是使用wxsqlite3访问则可正常显示中文。
如rq.csv是ASCII编码,那么导入后,使用sqlite3.exe查询正常显示中文,但使用wxsqlite3访问则查出来为空值。
导入的命令为:
.import rq.csv TDayInfo
导入完成后就可以使用了。
退出命令:
.exit
其实没有这个麻烦,现在的sqlite3都是用utf8保存,而在wxsqlite处理的时候居然还要转换一次utf8,所以就读不出来了。。
那我们就不用GetString()的方法获取,用GetBlob()来获取。
wxSQLite3ResultSet myResultSet;
...............
Stmp =wxString(myResultSet.GetBlob(i,i_charlen));//这里就省去了内部转换,中文就能直接读取了。。。。。。