网站大量收购独家精品文档,联系QQ:2885784924

【翻译】Qt内部机制及逆向-看雪学院.doc

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【翻译】Qt内部机制及逆向-看雪学院

【翻译】Qt内部机制及逆向 原作者:Daniel Pistelli ; 翻 译:zouzhin 参加看雪有很长一段时间了,一直无所贡献,真是有愧各位同坛好友。前不久发了个Qt求助帖/showthread.php?t=132491,没人回复,刚好看到了国外牛人Daniel Pistelli 写的《Qt Internals Reversing》,就翻译一下给需要的人做个参考。由于E文水平不高,有不对的地方多包涵,高手请直接看原文/files/qtrev.htm。 开始之前,简单补充介绍一下Qt: 用官网的话说:Qt——一个跨平台应用程序和UI开发框架针对多个平台只需编写一次代码 使用 Qt 您只需编写一次应用程序和 UI,无须重新编写源代码,便可跨不同的桌面和嵌入式操作系统进行部署,既节省了时间又降低开发成本。 创建令人意想不到的用户体验 QQt 提供了应用程序生成块,包括庞大的可定制 widget 集合、图形画布、风格引擎和其他内容,您可用来生成新颖的用户界面。由于集成了 3D 图形、多媒体音频或视频、视觉效果、动画和自定义风格,使其在竞争中脱颖而出。 事半功倍(且倍道而进) 无论是使用全新的 Qt Creator 跨平台 IDE 还是仅是 Qt 本身,Qt 都易学易用。而且由于有了 Qt 模块化的类库,您可以更多地关注创新,无须在平台本身编码上花费过多时间,这样就可将软件快速推向市场。 在单一应用程序中混合网络和本地代码 由于 Qt 集成了 WebKit 网络渲染引擎, 您可以快速地(查看混合方式) 将网络内容和服务集成到本地应用程序中,还可以利用网络环境提供您的服务和功能,让您的用户在使用过程中留下深刻印象。 in my opinion, the Qt framework will be used more and more by software developers”.个人也觉得Qt是有其优势,有兴趣的可以利用一下。 —————————————————————以下正式开始——————————————————— 内部机制 我见过的最严谨的C++框架就是Qt框架,Qt将C++带入了一个新的高度。Qt引入的信号(signal)和槽(slot)技术很有创意,其中一点就是,一个对象可以不要声明就可以调用其它对象的方法。为了运作信号和槽,Qt采用了动态化机制(dynamism)。这种动态化机制可以由Qt框架自动实现,也可以由开发人员通过QMetaObject类手动实现。有关信号和槽的内容可以参考/4.7/signalsandslots.html。 我们看一个简单的信号和槽的例子: // sas.h #include QObject class Counter : public QObject { Q_OBJECT public: Counter() { m_value = 0; }; int value() const { return m_value; }; public slots: void setValue(int value) { if (value != m_value) { m_value = value; emit valueChanged(value); } }; signals: void valueChanged(int newValue); private: int m_value; }; // main.cpp #include sas.h int main(int argc, char *argv[]) { Counter a, b; QObject::connect(a, SIGNAL(valueChanged(int)), b, SLOT(setValue(int))); a.setValue(12); // a.value() == 12, b.value() == 12 b.setValue(48); // a.value() == 12, b.value() == 48 return 0; } SIGNAL和SLOT宏将括号中的内容封装成一个字符串,同时还附加一个ID号,如下所示: #define SLOT(a) 1#a #define SIGNAL(a) 2#a 所以,也可以直接这么写connect函数: QObject::connect(a, 2valueChanged(int), b, 1setValue(int)); signals和slots是Qt关键词,可以在头文件中找到,只用于Qt的元编译器(moc

文档评论(0)

2752433145 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档