问题描述
|
我对ѭ0书中的此头文件有一些疑问:
#ifndef GOTOCELLDIALOG_H //Check if GOTOCELLDIALOG_H has not been defined prevIoUsly
#define GOTOCELLDIALOG_H
#include <QDialog>
#include \"ui_gotocelldialog.h\"
class GoToCellDialog: public QDialog,public Ui::GoToCellDialog {
Q_OBJECT
public: GoToCellDialog(QWidget * parent = 0);
private slots: void on_lineEdit_textChanged();
};
#endif
1-我知道ѭ2的意思。但是,它在这里有什么用?我的意思是,为什么我们要尝试对文件头文件进行“ 2”设置?
2-由于我继承了QDialog
和Ui::GoToCellDialog
,为什么我们还要#include
?
3-什么是Q_OBJECT
?为什么不以分号结尾?
4-这个构造函数GoToCellDialog(QWidget *parent = 0);
试图告诉我们什么?
非常感谢。
解决方法
1)这称为标题保护。它反复包含了该头等幂,即
#include \"gotocelldialog.h\"
#include \"gotocelldialog.h\"
与...相同
#include \"gotocelldialog.h\"
这看起来可能很奇怪。实际上,这是间接发生的。只要看看\ qobject.h \被包含在一个文件中的频率即可。
2)您只能使用之前已经定义的类型。 #include
带有您需要的声明。
3)ѭ7是Qt系统的一部分。这是一个宏,它定义了您班上的一些标准成员。这些成员支持信号/插槽等功能。
4)Qt小部件可能有也可能没有父母。如果他们没有父母,那么他们就是独立的窗口。如果他们确实有父母,则它们将成为父窗口的一部分,并随父窗口被销毁。
(QWidget *parent = 0)
参数列表是C ++表示默认参数的方式。如果您没有为父级传递显式值,则该值为0(NULL
)。这代表“没有父母”。因此,可以通过两种方式创建无父母的GoToCellDialog
:either16ѭ或new GoToCellDialog
。
,1)这是防止多个相同类型声明的模式。
2)如果头文件使用类型,则需要#include类型定义或进行前向声明。
3)Q_OBJECT是qt \的moc工具将用来扩展类声明以包括QObject特定声明的宏。
4)每个图形小部件都具有父/子关系。然后,默认构造函数将通过将父代作为参数传递,从而将新的窗口小部件关联到其父代。
,如果尚未事先定义包含保护,则此处使用“ 2”。第一个“ 19”检查该包含保护是否已在某处定义,如果尚未定义,则将在第二行中使用“ 2”对其进行定义。
这篇文章的“包括”防护:
在C和C ++编程语言中,使用#include防护,
有时称为宏观卫队
用于避免
双重包容问题
处理#include指令。
您包括了它们,因此链接器知道在哪里可以找到它的定义。
是一个宏...
该构造函数告诉您它使用QWidget指针,并且该参数默认为NULL,因此您可以使用ctor而不传递此参数。但是,这意味着您不应该在类中使用此参数,因为使用NULL指针是未定义行为。