Qt常用关键字
一、Qt数据类型
【1】 const auto groups = { “ABC”, “DEF”, “GHI”, “JKL”, “MNO”, “PQR”,
“STU”, “VW”, “XYZ” };
【2】 auto addressLabel = newQLabel(tr(“Address”));
auto okButton = new QPushButton(tr(“OK”));
【只读字符串,使用const修饰】
【auto:可以自动识别数据类型】
【tr:通用的国际语言,能识别目前的主流语言翻译】
【3】QTableView temp = static_cast<QTableView>(currentWidget());【static_cast<数据类型>转化,适合任何类型的转化】
二、Qt函数类型
【1】QString AddDialog::name() const
{
return nameText->text();
}
【2】QString AddDialog::address() const
{
return addressText->toPlainText();
}
【3】inline QDataStream &operator<<(QDataStream &stream, const Contact &contact)
{
return stream << contact.name << contact.address;
}
【使用const修饰函数,只允许这个函数返回一个只读字符串】
【inline :修饰联合函数,并且该函数简短,没有过多的循环语句】
【4】int rowCount(const QModelIndex &parent) const override;
【5】int columnCount(const QModelIndex &parent) const override;
【使用const修饰函数,只允许这个函数返回一个只读变量】
【override:重写关键字,代表子类重写父类虚函数,执行各自的功能】
3.1 函数重写(override function)
3.1.1 概念: 函数重写,也被称为覆盖,是指子类重新定义父类中有相同名称和参数的虚函数,主要在继承关系中出现。3.1.2 基本条件: 重写的函数和被重写的函数必须都为virtual函数,并分别位于基类和派生类中; 重写的函数和被重写的函数,函数名和函数参数必须完全一致;
重写的函数和被重写的函数,返回值相同,或者返回指针或引用,并且派生类虚函数返回的指针或引用的类型是基类中被替换的虚函数返回的指针或引用的类型的字类型。
拓展
2 函数重载(overload function)
2.1 函数重载的概念:
2.1.1 概念: 当函数具有相同的名称,但是参数列表不相同的情形(包括参数的个数不同或参数的类型不同),这样的同名而不同参数的函数之间,互相被称之为重载函数。2.1.2 基本条件: 函数名必须相同; 函数参数必须不相同,可以是参数类型或者参数个数不同; 函数返回值可以相同,也可以不相同。(备注:但是如果函数的名称和参数完全相同,仅仅是返回值类型不同,是无法进行函数重载的。)
【6】explicit RasterWindow(QWindow *parent = 0);
C++中的
explicit
关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的,跟它相对应的另一个关键字是implicit
, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)
.
`
explicit关键字的作用就是防止类构造函数的隐式自动转换.
explicit关键字在类构造函数参数大于或等于两个时无效
`
但是, 也有一个例外, 就是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, 此时,
当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数, 例子如下:
class CxString // 使用关键字explicit声明
{
public:
int _age;
int _size;
explicit CxString(int age, int size = 0)
{
_age = age;
_size = size;
// 代码同上, 省略...
}
CxString(const char *p)
{
// 代码同上, 省略...
}
};
// 下面是调用:
CxString string1(24); // 这样是OK的
CxString string2 = 10; // 这样是不行的, 因为explicit关键字取消了隐式转换
CxString string3; // 这样是不行的, 因为没有默认构造函数
string1 = 2; // 这样也是不行的, 因为取消了隐式转换
string2 = 3; // 这样也是不行的, 因为取消了隐式转换
string3 = string1; // 这样也是不行的, 因为取消了隐式转换, 除非类实现操作符"="的重载 )
三、Qt枚举类型
`
【1】左对齐:Qt::AlignLeft
【2】右对齐:Qt::AlignRight
【3】顶部对齐:Qt::AlignTop
【4】底部对齐:Qt::AlignBottom
【5】垂直居中对齐:Qt::AlignVCenter
【6】水平居中对齐:Qt::AlignHCenter
【7】水平垂直居中对齐:Qt::AlignCenter
`
四、Qt运算符重载函数类型
【1】bool operator==(const Contact &other) const{
return name == other.name && address == other.address;
}
【2】inline QDataStream &operator<<(QDataStream &stream, const Contact &contact){
return stream << contact.name << contact.address;
}
【3】inline QDataStream &operator>>(QDataStream &stream, Contact &contact){
return stream >> contact.name >> contact.address;
}
【inline :修饰联合函数,并且该函数简短,没有过多的循环语句】
【对==重载,接收一个结构体变量判断当前值和已有值是否相等,相等返回1,不等返回0】
【const:修饰只读变量,该变量的值已知】
【对数据流<<追加的重载,依次赋值name和address给stream,由于是应用& ,所以stream获取值,并且将此值返回】
【对数据流>>追加的重载,stream依次赋值name和address,由于是应用& ,并且将此值返回】