QT选操作word的插入指定大小图片
搜索很久,并未发现相关解决方法,大部分博主提供的方法并不能解决设置大小的问题,于是自己查看了微软的office接口方法
直接上代码,中间省略部分内容,阅读时注意哦
///初始化QAxObject//
HRESULT r = OleInitialize(0);
if (r != S_OK && r != S_FALSE){
qCritical("Qt: Could not initialize OLE (error %x)", (unsigned int)r);
return false;
}
//office或者wps
QAxObject * word = new QAxObject();
bool opFlag = word->setControl("Word.Application");
if(!opFlag)
opFlag = word->setControl("kwps.Application");
if(!opFlag){
qWarning()<<"新建word应用程序失败!";
OleUninitialize();
return false;
}
//设置不可见
word->setProperty("Visible",false);
//获取所有的工作文档
QAxObject *documents = word->querySubObject("Documents");
if (!documents){
OleUninitialize();
return false;
}
//以szdotfile.doc为模板新建一个文档
documents->dynamicCall("Add(QString)", szdotfile);
//获取当前激活的文档
QAxObject *document = word->querySubObject("ActiveDocument");
//获取word中书签对象
QAxObject *bookmark_code = document->querySubObject("Bookmarks(QVariant)", szMarkCode);
//选中书签
bookmark_code->dynamicCall("Select(void)");
//获取ranged对像
QAxObject *range = bookmark_code->querySubObject("Range");
//存储图片方法1 不需要设置图片大小 直接填充的
QVariant tmp;
QList<QVariant> qList;
if(!range->isNull()){
tmp = range->asVariant();
qList<< QVariant(szContent) << QVariant(false) << QVariant(true) << tmp;
}
QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
if(!Inlineshapes->isNull())
Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
//存储图片方法2 设置图片大小
QVariant tmp;
QList<QVariant> qList;
if(!range->isNull()){
tmp = range->asVariant();
qList<< QVariant(szContent);
qList<< QVariant(false);
qList<< QVariant(true);
qList<< QVariant(2); //top 起始点上方距离,像素点
qList<< QVariant(6); //left
qList<< QVariant(280); //width
qList<< QVariant(140); //height
qList<< tmp;
}
QAxObject *shapes = document->querySubObject("Shapes");
if(!shapes->isNull())
shapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant, "\
"QVariant, QVariant, QVariant ,QVariant, "\
"QVariant)",
qList);
附上微软的接口链接,可以找到对应的属性、对象和方法
方法说明-> https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa171535(v=office.11)?redirectedfrom=MSDN
属性、对象-> https://docs.microsoft.com/zh-cn/office/vba/api/word.wdprotectiontype
可以先使用office的宏录制,查看大概得属性和方法,再去文档中查找具体使用方法