Daily Archives: March 26, 2006

上周五早讨论时遇到的几个问题

1. olb?

*.olb可被认为是*.tlb的前身,它也是表述com对象的信息,现在已经被定义更完整的
*.tlb代替掉了,使用*.olb的ocs/activeX一般是较为早期的产品。

2. axWidgetTOC->dynamicCall("SetBuddyControl(IDispatch*)",
(axWidgetPageLayout->querySubObject("Object"))->asVariant());

Object是PageLayout的一个属性。querySubObject输入方法名或属性名。
HRESULT IPageLayoutControl2::get_Object(
IDispatch** ppDispatch
);

3. catalog open file dialog

GxDialog在ArcEngine里不能用。这里有个帖子讨论这个问题:
http://forums.esri.com/Thread.asp?c=159&f=1705&t=163159&mc=5
这里有个例子,也可以参考
http://edndoc.esri.com/arcobjects/9.0/default.asp?URL=/arcobjects/9.0/Sample
s/Geodatabase/Accessing_Data/Browse_for_data_using_name_objects/Browse_for_d
ata_using_name_objects.htm

4. Q_Declare_private / d_func()
目的是为了在类里隐藏界面冗长的代码,将界面代码放置到专设的 QxxxPrivate类里
去。相关的定义如下:
#define Q_DECLARE_PRIVATE(Class)
inline Class##Private* d_func() { return reinterpret_cast<Class##Private
*>(d_ptr); }
inline const Class##Private* d_func() const { return
reinterpret_cast<const Class##Private *>(d_ptr); }
friend class Class##Private;

#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 Class;

#define Q_D(Class) Class##Private * const d = d_func()
#define Q_Q(Class) Class * const q = q_func()

在使用时,
//////////////////////
class QDialogPrivate;

class Q_GUI_EXPORT QDialog : public QWidget
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDialog)
///////////////////////
class QDialogPrivate : public QWidgetPrivate
{
Q_DECLARE_PUBLIC(QDialog)
public:
///////////////////////
d_ptr是在QObject里定义的,protected,为指向 QObjectData的指针
p_ptr是在QObjectData里定义,public,指向QObject的指针
在使用时,定义Q_D(class)和Q_Q(Class),直接使用 d和q两个指针