1、Qt中自动生成的构造函数
(1)Qt中自动生成的构造函数的声明
class Chat : public QWidget
{
Q_OBJECT
public:
explicit Chat(QWidget *parent = 0); //声明构造函数,可以带有初始值“=0”,表该参数为默认参数且调用时该参数可省略
~Chat();
private:
Ui::Chat *ui;
};
其中 “explicit Chat(QWidget *parent = 0);”为声明的构造函数,QWidget *parent = 0代表该参数为默认参数且调用时该参数可省略,即调用时该函数可以没有实参。
(2)Qt中自动生成的构造函数的定义
Chat::Chat(QWidget *parent) : //构造函数的定义,注意不能带有初始值“=0”
QWidget(parent),
ui(new Ui::Chat)
{
ui->setupUi(this);
}
其中,构造函数:Chat::Chat(QWidget *parent) : QWidget(parent),ui(new Ui::Chat){......}形式中,“::”前的Chat表示类名,“::”后的Chat为成员函数,其名称与类相同,表示该类的构造函数,(QWidget *parent)为该构造函数的参数,注意在定义时参数中不能带有初始值“=0”,只能在声明的时候有。“:”之后的部分为构造函数的初始化参数列表,其中QWidget(parent)为派生类Chat显式调用父类QWidget的构造函数,并传参,调用顺序是先调用父类构造函数,再调用派生类的构造函数,若不写调用父类的默认构造函数。 ui(new Ui::Chat)表示使用类内初始值对ui进行初始化,这部分可以放到函数体中实现,成为:
Chat::Chat(QWidget *parent ) :QWidget(parent)
{
ui = new Ui::Chat;
ui->setupUi(this);
}
2、重写Qt中的默认构造函数
(1)重写Qt中的默认构造函数的声明
class Chat : public QWidget
{
Q_OBJECT
public:
explicit Chat(QString destUser, QWidget *parent = 0);//注意:默认参数必须是函数参数列表中最右边的参数
~Chat();
private:
Ui::Chat *ui;
};
注意:默认参数必须是函数参数列表中最右边的参数,在函数调用的时候可以省略,当调用该函数时若实参的个数和定义时形参的个数不一致时,默认是从左往右匹配,所以默认参数要放在函数列表的最右边。如:
void Widget::on_userTableWidget_doubleClicked(const QModelIndex &index)
{
int row = index.row(); //返回点击的行
if(row != ui->userTableWidget->rowCount() - 1){
QString destUser = ui->userTableWidget->item(row,0)->text();
Chat *chat = new Chat(destUser); //只传入一个类型为QString的实参,从左往右匹配
chat->show();
}else{
QMessageBox::information(this, tr("提示"), tr("不能与自己聊天"));
}
}
(2)重写Qt中的默认构造函数的定义
Chat::Chat(QString destUser, QWidget *parent ) ://注意:定义时都不能带有默认值
QWidget(parent),
ui(new Ui::Chat)
{
qDebug()<<destUser;
ui->setupUi(this);
}
注意:函数定义时的函数列表中都不能带有默认值。