1.对于析构函数,一定要以virtual ~A();来标示所有的子类,父类的析构函数
2.对于静态初始化,由于对函数名命名有严格规定,也就是说若是A。cpp、b。cpp的静态函数,会依靠pro里的cpp的先后顺序来实现
2.2window下linux下对,声明的顺序有不同的标准,不可相同对待
2.3在A文件里定义静态对象a,B文件静态调用a时,会出现定义先后顺序导致的软件启动失败,尤其在linux、window下不同
2.3.2解决办法,可以在A文件定义对象时,定义指针(空) a,B文件静态调用a时,判断对指针赋值,及时析构就好
A.h
class QstandarditemmodelManager {
QstandarditemmodelManager();
~QstandarditemmodelManager();
QStandardItemModel* mCreator();
private:
QStandardItemModel *p;
};
A.cpp
QstandarditemmodelManager::QstandarditemmodelManager()
{
p = 0;
}
QstandarditemmodelManager::~QstandarditemmodelManager()
{
if(p) delete p;
}
QStandardItemModel* QstandarditemmodelManager::mCreator()
{
if(p == 0)
p = new QStandardItemModel;
return p;
}
3.模板类,函数的定义是不能在cpp里执行,只能在。h里面定义
4. SELECT hex(0x10221 & bin(1111)) -》10021
基本没用,&的话,2进制最明显
5.rgb(x,x,x), rgba(x,x,x,x), #xxxxxx, shv(x,x,x)【样式表能获取,QColor无法识别】
5.5QSvgRenderer真实rect和viewboxrect转换
#include "mainwindow.h"
#include <QApplication>
#include "form.h"
#include <QSvgRenderer>
#include <QtWidgets>
#include <QtDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSvgRenderer render(QString(":/default.svg"));
QRectF rectp(0, 0, 400, 400);
QRectF rect2(100, 100, 200, 200);
QRectF rectd = QRect(QPoint(0,0), render.defaultSize());
QPixmap w(rectp.size().toSize());
QRectF rect1 = QRectF(-rect2.x()*rectd.width()/rect2.width(),
-rect2.y()*rectd.height()/rect2.height(),
(rectd.width()*rectp.width())/rect2.width(),
(rectd.height()*rectp.height())/rect2.height()
);
qDebug() << rect1;
render.setViewBox(rect1);
QPainter p(&w);
render.render(&p);
QLabel l;
l.setPixmap(w);
l.show();
return a.exec();
}
//default: 0,0,wd,hd: 0, 0, 400, 400
//x1, y1, w1, h1: -200,-200, 800,800
//QPainter: 0,0,wp,hp: 0,0,200,200
//x2, y2, w2, h2: 50, 50, 100, 100
//-x1*w2/wd= x2 x1 = -x2*wd/w2
//-y1*h2/hd= y2 y1 = -y2*hd/h2
//wd/w1*wp = w2 w1 = (wd*wp)/w2
//hd/h1*hp = h2 h1 = (hd*hp)/h2