Archive for the '随笔类' Category
一直在搞QTSQL方面的东东,虽然应用的不是好深入,但用久了,总有些小技巧,比如最近就发现一个:在sqlite的表,用QSqlTableModel+QTableView显示数据,编辑时发现数据库中定义的数据类型为Decimal的字段没有显示一个doublespinbox的控件来作为编辑控件,而定义为numeric的字段就可以。为了解这个原因,读了一下Qt的代码,在QTDIR\src\sql\drivers\sqlite\qsql_sqlite.cpp文件中发现如下方法:
static QVariant::Type qGetColumnType(const QString &tpName)
{
const QString typeName = tpName.toLower();
if (typeName == QLatin1String(‘integer’)
|| typeName == QLatin1String(‘int’))
return QVariant::Int;
if (typeName == QLatin1String(‘double’)
|| typeName == QLatin1String(‘float’)
|| typeName.startsWith(QLatin1String(‘numeric’)))
return QVariant::Double;
if (typeName == QLatin1String(‘blob’))
return QVariant::ByteArray;
return QVariant::String;
}
于是释然。
呵呵,一篇很短的小文,希望能对正在使用QTSQL模块做开发的朋友带来一点帮助。
Read More...
Tags: qtsql qsqlite qt
Posted on August 28th, 2010 in Qt技术, 随笔类 | No Comments ».
不知道具体从Qt4的哪个小版本开始, QtEmbedded提供了基于DirectFb的绘制插件, 也就是说理论上利用该插件Qt可以基于DirectFb的绘图机制来画Qt自己的界面, 同时理论上也应该可以利用上DirectFb提供的图形加速机制。
前面说的都是理论上, 具体如何还是得事实说话。 今天我们就来讨论讨论Qt4对DirectFb的支持究竟到什么程度, 以及我们怎么才能测试该功能。
书归正传。 可能很多小朋友还不知道DirectFb提供有与X11的集成, 可以通过DirectFb的接口直接操作与X11集成的显卡驱动。 这句话听着有点坳口…呵呵, 其实笔者写出这句话来还有点怀疑可能哪里写的不符合事实了。 简单点说吧, DirectFb可以把自己获得的数据转到X11的窗口去, 有点类似QVFb的功能 -- 这样说是不是能明白点? 通过QtEmbedded->QtDirectFb->DirectFb->X11, QtEmbedded的widget就被画到了一个X11窗体上, 我们可以把这个X11窗体看成是DirectFb基于X11的模拟器。
我们来一步一步看怎么才能在自己的Linux上测试这一功能。
安装DirectFb的包
以笔者的OpenSuSE11为例。 打开yast->Software manager, 搜索“DirectFb”。 需要安装DirectFb 和 DirectFb-devel两个包。
编译QtEmbedded
QtDirectFb插件可以在configure时指定编译, 用下面的参数:
configure -qt-gfx-directfb [other options]
如果你configure时忘记加该参数也没有关系, 可以在普通编译之后单独编译该插件:
cd $QTEDIR/src/plugins/gfxdrivers/directfb
make; make install
Read More...
Tags: DirectFb, Qt4
Posted on October 28th, 2009 in Linux技术, Qt技术, Windows技术, 随笔类 | No Comments ».
本来前两天转了一篇qteveywhere介绍Qt开发者认证的博文,后来想了想转载没什么意思,还是应该自己写写。
赫赫,本文的题目起的不太贴切, 可能叫“揭秘”更好些, 毕竟咱签了NDA, “泄密”这么不厚道的事咱可干不来。
关于Qt开发者认证的详细内容,请各位参考qteverywhere博客的文章(http://www.qteverywhere.com/archives/565), 这里笔者就不啰嗦了。 本文的重点是讲讲笔者去考试的感受。
报名需要在http://www.pearsonvue.com/注册帐号, 注册Nokia Qt考试, 选择考试网点和时间。 网点选项很多, 因为是上机考试,时间也很灵活, 笔者选择的考点每15分钟左右就有一个考试(跟京津动车似的)。 当然要填写一些自己的个人信息,姓名、email之类的, 最后确认时会交费。 关于交费这项笔者就没什么发言权了,因为俺用的优惠代码,没走到交钱那一步, 不过估计网上银行付款应该没什么问题。
根据报名的确认信息, 参加考试的人员应该在考试时间前至少15分钟到达考场, 因为前面还要进行你身份的确认和随身物品的寄存等。 考试当天记得带上自己的身份证件,如身份证,驾驶证等。 任何私人物品都不能带进考场,包括手机、纸笔等, 这些东西都要寄存。 考试前会给每位考生发一支笔和一张纸,可以拿来做Notes, 其实也用不上, 因为每道题目都有一个标记的地方,可以设个标记后面检查的时候根据标记就知道哪道题需要review了,很方便。
考试之前先是显示一篇NDA协议,差不多就是些“保证不泄漏考试题目”等等的内容, 一路确认接受协议才能继续考试。 所以想看开发认证会考到Qt哪些内容的同学要失望咯, 咱可不能干坏事…
Qt开发者认证全部是机考, 由系统随机抽取五十道题目,有单选多选,以多项选择题为主。 有些同学一听说是多选题立马就晕菜了,要知道我们常见的多选题可是多选少选都算错的! 不过那些老外没那么变态, 赫赫,Qt考试的题目中都会明确告诉你本题需要选择几个答案,甚至你多选少选了都会弹出提示信息, 你想这么做都是不可能的~~~ 每道题目都可以做标记,一种是“Review”的标记,一般是对答案不太确定,需要再来看一遍题目的时候使用, 还有一种是“Comments” 标记,估计是如果你觉得题目出的有问题可以发表一下自己的看法。
如果你对题目做了标记,在你做完题目之后系统会显示出你所有题目的标记,你可以点击某个题目的编号直接跳到你需要查看的题目,并且可以修改答案, 很人性化的设计。 全部题目要求在60分钟之内完成。 确认完成考试之后就不能再返回去修改答案了, 等待你的还有一个小的Survey, 让你对本次考试做个评价。 评价完成, 退出考试。 最后会打印一个考试的确认信, “感谢你参加Qt认证考试”云云, 当时是看不到答对题的数量的,也看不到题目的答案。 分数要过一段时间才能出来….俺的还不知道结果如何…等待ing…
Read More...
Tags: Certificate, Qt
Posted on October 26th, 2009 in 新闻类, 随笔类 | Comments Off.
大家如果经常上Qt的官网可能注意到Qt从发布4.5开始开放了源代码仓库,并且邀请广大开源爱好者贡献自己的力量。 有兴趣有能力的同学们可要加油了哦~
当然大多数同学还是像我这样有兴趣但没能力的,不过也不用太着急,我们仍然有监督的权力,呵呵。
Qt的源码仓库
Qt的源码仓库用git做版本管理,提供浏览器可以访问的界面, 随便拿个browser就可以浏览仓库里的文件内容。
仓库的位置在 http://qt.gitorious.org/qt/qt
如果要下载源码其实也比较方便, git有不同平台的客户端,所以不管你用windows还是linux都可以很容易地获得最新的Qt源码并对其进行编译和验证。 几乎所有的Linux发行版都带了git的安装包,现成可用。 安装好git之后用下面的命令下载源码:
git clone git://gitorious.org/qt/qt.git
这样你拿到的是默认源码分支“master”。 用”git branch”命令可以看到当前工作的分支。
而用下面的命令可以查看Qt所有的源码分支:
git remote show origin
Read More...
Tags: build, git, mingw, Qt
Posted on October 23rd, 2009 in Linux技术, Qt技术, Windows技术, 随笔类 | 6 Comments ».
遇到这个BUG已经过了好几天了,很小的一个问题。本不准备再去提及的,后来想想,还是应该写出来以警示自己。
问题发生于QQ群里的网友在编写一个字符串反转的函数,在测试的时候莫名其妙的遇到了段错误的问题,程序无法正常执行,但是光看函数代码貌似没什么问题,围绕着那个函数翻来覆去的看了N遍也没搞明白。最后却在函数外发现了问题。且以下面的代码做一个示例,演示一下这个BUG吧:
Read More...
Tags: C++, const, 常量
Posted on August 5th, 2009 in C++, 随笔类 | 2 Comments ».
介绍
connectSlotsByName 是一个QMetaObject类里的static函数,其定义如下:
static void connectSlotsByName(QObject *o);
其作用是如其名称一样,用来将QObject *o里的子孙QObject的某些信号按照其objectName连接到o的槽上。
起因
为啥会对这个函数产生一探究竟的想法呢?——
既然是根据objectName来连接信号和槽,那么就有了几个问题:
能不能对多个QObject设置同样的objectName呢?
如果能,那么connectSlotsByName会连接多少个QObject的信号到指定的槽上呢?
测试结果
有了疑问,第一个应该做的事情,当然是编写代码进行测试了。
在测试的主窗口类构造函数在“ui->setupUi(this); ”语句前编写如下代码:
for(int i=0;i<9;++i) { QPushButton *btn=new QPushButton(this); btn->setObjectName(“TestButton”); qDebug(btn->objectName().toStdString().c_str()); [...]
Read More...
Tags: connectSlotsByName, QMetaObject, Qt, 信号, 槽
Posted on July 13th, 2009 in C++, Qt技术, 随笔类 | No Comments ».