qt上5264的档 - qt百度贴吧吧

Doxygen 的注释格式 - ghost1236的专栏
- 博客频道 - CSDN.NET
4089人阅读
Doxygen 的注释格式&&& Doxygen 的注释格式十分灵活.可以是JavaDoc, Qt和仿c++风格, 并且可以混合使用. 如果你熟悉Doc++,就按照你以前的风格写好了:). 下面对每种风格简单举例:-- JavaDoc风格:/*** your comment text.*/-- Qt风格:/*!* your comment text.*/-- 仿c++风格:///&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //!/// your comment text.&&&&& 或者: //! your comment text.///&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //!&&& 因为我一直喜欢用c++的单行注释风格(即'//'),所以下面举例就以仿c++风格为例. 下面注释中的'@'和'/'等价,可以根据爱好选用.&&& 因为是在头文件中定义接口,所以注释也就主要集中于头文件中. 如果你想在实现文件中注释,其效果和在头文件中是一样的.下面就举一个实例.备注:a) '#' 后面的注释是我加的简单解释.不属于文档注释内容.&&&& b) Doxygen 允许一条简短注释,加上一条详细注释.其格式也是多样的. 一般,在 JAVADOC_AUTOBRIEF = NO时,简短注释(///@brief )后空一行,然后再是详细注释. 当 JAVADOC_AUTOBRIEF = YES时,并且简短注释以第一个句号结束,句号后跟一空格(即'. ');或者是新起一行,就可以写详细注释了.示例如下:# 简短注释. 详细注释./// Brief description which ends at this dot. Details follow/// here.&&& c) 如果同一代码条目在声明和定义处都有简短注释和详细注释, 则文档只采用声明前的简短注释和定义前的详细注释.&&& d) 如果是在行尾注释变量,参数等,在你选用的注释格式后面加上'&', 如: ///&行尾的注释.----------------------------- Example Begin ---------------------------------# 文件的注释格式# 注释文件,格式: ///@file 文件名 文件的简短注释.///@file socket_c.h head file of class socket_c.# 文件的详细注释.///Define the interface of class socket_c.# 普通注释,不会生成在文档中.//$Id: socket_c.h 287
06:20:41Z horin $# 类的注释,格式: ///@brief 简短注释内容.///@brief class of server socket.class socket_c{private:public:&&& # 函数的注释格式&&& # 函数的注释,格式: ///@brief 函数的简短注释.&&& ///@brief handle the connections of clients.&&& # 参数注释,格式: ///@param 参数的简短注释.&&& ///@param server the server ip address.&&& ///@param serv_port the server #port.&&& # 返回值注释,格式: ///@return 返回值的简短注释.&&& ///@return connected socketfd.&&& # 具体返回值的注释,格式: ///@retval 返回值 该返回值的注释.&&& ///@retval connfd on success.&&& ///@retval 0 on EINTR - system call.&&& ///@retval -1 on error.&&& # 参见...,格式: ///@see 参见的类/文件等.&&& ///@see main_ppc.cpp&&& int accept_client(const int listenfd);};# 自定义类型的注释///@brief structure of child process.struct child_proc_s{&&& # 行尾的注释,格式: ///& 注释内容.&&& pid_t child_&&& ///&child process id.&&& int child_&&& ///&parent's stream pipe to/from child.};# 全局变量的注释,也可以采用上面的行尾格式进行注释.///gloable variable for signal.pid_t g_pid = 0;----------------------------- Example End ---------------------------------
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:101595次
积分:1352
积分:1352
排名:第15311名
原创:30篇
转载:49篇
(1)(3)(2)(15)(16)(11)(1)(2)(4)(11)(6)(7)QT Q_D && Q_Q - bitscro的专栏
- 博客频道 - CSDN.NET
1930人阅读
/c?m=9d78d513dcd6d75521dbc90edbfee17cbbbad696f7c31dad11e0fd71df89fbe8ae4de1b9a637c3f983d38ec6afd5&p=8b2aa911fcd520575d&user=baidu&fm=sc&query=qt+Q_D&qid=c3f6e9&p1=9
源码中有很多Q_Q和Q_D
宏,使用这些宏的地方总会看到有q指针和d指针,查了查KDE文档,大体搞清了其中的机理,欧也!Qt
的这些私有数据访问策略还是挺值得借鉴。下面就简单总结一下。
发了点牢骚,Qt
的成员变量get访问器命名实在有点难以接受,get访问器和成员变量名一样,不像Bean的风格,有些编译器甚至通不过。命名的时候就还是加上get好点,习惯成自然,郁闷。
私 有成员总是不可见的,Qt
私有成员不仅仅是简单封装一下,将访问权限改为private,它将所有私有数据封装在私有类里(命名就是 classname##private),
这样一来连用户都不知道他到底封装了什么,程序中只有这个私有类成员指针,这个指针就是D-指针。有1毛钱,以前都是把它藏在内衣兜里,现在不是啦,我把
它存在信用卡里,把信用卡藏在内衣兜里,够狠吧。。。
假 如整个类的继承体系有点深怎么办,想用那一层的东西还要一点点的爬着去找,真麻烦!
没关系,有共享d指针呢,只需要在上一层里加个d指针就可以省去这么多麻烦了。它可以访问任意一层的私有数据(其实这样就不是private啦,叫
protected还差不多,有点不像OO),还可以获取父层的访问器。
共享d指针实现方法如下:
1、在基类中定义一个protected权限的d_ptr指针;
2、在每个派生类中定义d_func(),获取基类d_ptr,并将其转换为当前私有类指针(派生自基类d_ptr);
3、在函数中使用Q_D
,这样就可以使用d了;
4、在私有数据继承体系中,不要忘记将析构函数定义为虚函数,基类析构函数中释放d_ptr,以防内存泄露!!!
5、类的派生,加上protected 构造函数,调用父类构造函数,将私有数据类传参;
这里有个 共享d指针 的例子。
protected :
& KFooBasePrivate * const d_
& KFooBase ( KFooBasePrivate & dd , QObject * parent );
&& friend class KFooBaseP
&& inline KFooBasePrivate * d_func () { return d_ }
&& inline const KFooBasePrivate * d_func () const { return d_ }
protected :
& KFooDerived ( KFooDerivedPrivate & dd , QObject * parent );
&& friend class KFooDerivedP
&& inline KFooDerivedPrivate * d_func ()
&& { return reinterpret_cast & KFooDerivedPrivate *&( d_ptr ); }
&& inline const KFooDerivedPrivate * d_func () const
&& { return reinterpret_cast & KFooDerivedPrivate *&( d_ptr ); }
前两步的声明工作交给Q_DECLARE_PRIVATE宏去处理,就简单多了,我们所要做的就是在私有类的实现和Q_D
template &typename T& static inline T *qGetPtrHelper(T *ptr) { }
&typename Wrapper& static inline typename Wrapper::pointer
qGetPtrHelper(const Wrapper &p) { return p.data(); }
// 在主类中的Private Data 声明,Q_D
#define Q_DECLARE_PRIVATE(Class) /
&&& inline Class##Private* d_func() { return reinterpret_cast&Class##Private *&(qGetPtrHelper(d_ptr)); } /
inline const Class##Private* d_func() const { return
reinterpret_cast&const Class##Private *&(qGetPtrHelper(d_ptr)); } /
&&& friend class Class##P
// 在主类中的Private Data 声明(在d指针命名非d_ptr而是Dptr情况下使用),Q_D
#define Q_DECLARE_PRIVATE_D(Dptr, Class) /
&&& inline Class##Private* d_func() { return reinterpret_cast&Class##Private *&(Dptr); } /
&&& inline const Class##Private* d_func() const { return reinterpret_cast&const Class##Private *&(Dptr); } /
&&& friend class Class##P
#define Q_D
(Class) Class##Private * const d = d_func()
搞清了d指针,q指针就简单多了,有没有发现&q&和&d&哪里有点像,是滴!&q&就是&d&倒过个来。q指针的方向正好和d指针相反,它是在私有数据类中使用的(d指针只在主类中使用,就是使用私有数据类的那个类,真拗口!),来获取主类指针。
// 在私有数据类中的Public Data声明,Q_Q使用之
#define Q_DECLARE_PUBLIC(Class)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& /
&&& inline Class* q_func() { return static_cast&Class *&(q_ptr); } /
&&& inline const Class* q_func() const { return static_cast&const Class *&(q_ptr); } /
&&& friend class C
#define Q_Q(Class) Class * const q = q_func()
的这种机制破坏了
OO,我想这就是它为何只做内部使用的原因吧。。。&&
有点完全依赖宏的味道,不像它的signal/slot,通过moc编译插入元数据。不过还是方便hack了。至于signal/slot,我想应该
可以通过macro和函数指针来作为替代方案,改天再see
see。这里只是把看到的关于D指针的文章和自己的体会简单总结翻译一下,更详细的可以看下面两个连接。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:73185次
积分:1216
积分:1216
排名:第17333名
原创:41篇
转载:59篇
(3)(3)(1)(9)(2)(1)(1)(1)(4)(1)(1)(1)(1)(6)(8)(11)(6)(1)(12)(5)(19)(1)(2)Qt Creator到底怎么配?我都折腾一天半了,快疯了_qt吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:16,782贴子:
Qt Creator到底怎么配?我都折腾一天半了,快疯了收藏
百度到说装了那个SDK就成。去官网找了个,我还特地看了下载的文件名字确实是SDK结尾的。结果我装完,只有一个Qt Creator,没有Qt,没有MinGW。于是又杀奔官网火速下了个Qt for Mingw装上后在选项 Qt版本里找到qmake.exe,选上了,挨,怎么有个感叹号?于是又装了个Mingw,一看居然是绿色的在工具链里添加了Mingw,编译器路径写的g++.exe,调试器c++.exe(我不知道正确的后来把bin所有文件都试了一遍),工程建立了,是QT4控制台程序,编译,通不过#include &iostream&int main(int argc, char *argv[]){ cout&&"Hello,world"&& return 0;}15:02:07: Running steps for project HelloWorld... 15:02:07: 配置没有改变, 跳过 qmake 步骤. 15:02:08: 正在启动 "mingw32-make.exe" {1"?} {2?} qtcreator_ctrlc_stub: Command line failed: mingw32-make.exe 15:02:08: 进程"mingw32-make.exe"崩溃。 Error while building/deploying project HelloWorld (target: 桌面) When executing step 'Make'到底哪的事?我要疯了。
qt-creator-win-opensource-2.5.0.exeqt-win-opensource-4.8.4-mingw.exegcc-4.4.0-mingw32-bin.zip就是这仨。
求助啊。。。。
只装了qt-sdk-win-opensource-2010.05.exe。。。
楼主要不要Qt SDK啊??包含编译器、IDE、帮助文档等。。安装完毕直接用。。。不用配置。。。要的话给我回复。。。
快速发表回复.../share/link?shareid=222671&uk=装这个
我之前也是报相似的错,弄了许久。错误日志中只是:进程"mingw32-make.exe"崩溃。为进程"make.exe"崩溃。 这点不同,最后在Path中将MinGW\bin加上,重启Qt creator,工具链中就能自动检测到,然后就好了。
尼玛的我刚配完,庆祝一下,原来是和该死的djgpp冲突了,mingw配到用户变量里被系统变量djgpp给推了,困扰了我一下午,提示的就是LS的make崩溃
windows下qt问题真多还是用linux里的吧
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或&&&&&&&&&&&
/c?m=9d78d513dcd6d75521dbc90edbfee17cbbbad696f7c31dad11e0fd71df89fbe8ae4de1b9a637c3f983d38ec6afd5&p=8b2aa911fcd520575d&user=baidu&fm=sc&query=qt+Q_D&qid=c3f6e9&p1=9
Qt 源码中有很多Q_Q和Q_D 宏,使用这些宏的地方总会看到有q指针和d指针,查了查KDE文档,大体搞清了其中的机理,欧也!Qt 的这些私有数据访问策略还是挺值得借鉴。下面就简单总结一下。
D-指针 私 有成员总是不可见的,Qt 中私有成员不仅仅是简单封装一下,将访问权限改为private,它将所有私有数据封装在私有类里(命名就是 classname##private), 这样一来连用户都不知道他到底封装了什么,程序中只有这个私有类成员指针,这个指针就是D-指针。有1毛钱,以前都是把它藏在内衣兜里,现在不是啦,我把 它存在信用卡里,把信用卡藏在内衣兜里,够狠吧。。。
假 如整个类的继承体系有点深怎么办,想用那一层的东西还要一点点的爬着去找,真麻烦! 没关系,有共享d指针呢,只需要在上一层里加个d指针就可以省去这么多麻烦了。它可以访问任意一层的私有数据(其实这样就不是private啦,叫 protected还差不多,有点不像OO),还可以获取父层的访问器。 共享d指针实现方法如下: 1、在基类中定义一个protected权限的d_ptr指针; 2、在每个派生类中定义d_func(),获取基类d_ptr,并将其转换为当前私有类指针(派生自基类d_ptr); 3、在函数中使用Q_D ,这样就可以使用d了; 4、在私有数据继承体系中,不要忘记将析构函数定义为虚函数,基类析构函数中释放d_ptr,以防内存泄露!!! 5、类的派生,加上protected 构造函数,调用父类构造函数,将私有数据类传参;
这里有个 共享d指针 的例子。 基类: protected : & KFooBasePrivate * const d_ & KFooBase ( KFooBasePrivate & dd , QObject * parent ); private : && friend class KFooBaseP && inline KFooBasePrivate * d_func () { return d_ } && inline const KFooBasePrivate * d_func () const { return d_ }
派生类: protected : & KFooDerived ( KFooDerivedPrivate & dd , QObject * parent ); private : && friend class KFooDerivedP && inline KFooDerivedPrivate * d_func () && { return reinterpret_cast & KFooDerivedPrivate *&( d_ptr ); } && inline const KFooDerivedPrivate * d_func () const && { return reinterpret_cast & KFooDerivedPrivate *&( d_ptr ); }
前两步的声明工作交给Q_DECLARE_PRIVATE宏去处理,就简单多了,我们所要做的就是在私有类的实现和Q_D 的使用。
template &typename T& static inline T *qGetPtrHelper(T *ptr) { } template &typename Wrapper& static inline typename Wrapper::pointer qGetPtrHelper(const Wrapper &p) { return p.data(); }
// 在主类中的Private Data 声明,Q_D 使用之 #define Q_DECLARE_PRIVATE(Class) / &&& inline Class##Private* d_func() { return reinterpret_cast&Class##Private *&(qGetPtrHelper(d_ptr)); } / &&& inline const Class##Private* d_func() const { return reinterpret_cast&const Class##Private *&(qGetPtrHelper(d_ptr)); } / &&& friend class Class##P
// 在主类中的Private Data 声明(在d指针命名非d_ptr而是Dptr情况下使用),Q_D 使用之 #define Q_DECLARE_PRIVATE_D(Dptr, Class) / &&& inline Class##Private* d_func() { return reinterpret_cast&Class##Private *&(Dptr); } / &&& inline const Class##Private* d_func() const { return reinterpret_cast&const Class##Private *&(Dptr); } / &&& friend class Class##P
#define Q_D (Class) Class##Private * const d = d_func()
Q-指针 搞清了d指针,q指针就简单多了,有没有发现&q&和&d&哪里有点像,是滴!&q&就是&d&倒过个来。q指针的方向正好和d指针相反,它是在私有数据类中使用的(d指针只在主类中使用,就是使用私有数据类的那个类,真拗口!),来获取主类指针。
// 在私有数据类中的Public Data声明,Q_Q使用之 #define Q_DECLARE_PUBLIC(Class)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& / &&& inline Class* q_func() { return static_cast&Class *&(q_ptr); } / &&& inline const Class* q_func() const { return static_cast&const Class *&(q_ptr); } / &&& friend class C #define Q_Q(Class) Class * const q = q_func()
感 觉Qt 的这种机制破坏了 OO,我想这就是它为何只做内部使用的原因吧。。。&& 有点完全依赖宏的味道,不像它的signal/slot,通过moc编译插入元数据。不过还是方便hack了。至于signal/slot,我想应该 可以通过macro和函数指针来作为替代方案,改天再see see。这里只是把看到的关于D指针的文章和自己的体会简单总结翻译一下,更详细的可以看下面两个连接。
阅读(...) 评论()}

我要回帖

更多关于 百度贴吧设置签名档 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信