QT中关于书签的操作
生活随笔
收集整理的這篇文章主要介紹了
QT中关于书签的操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
書簽的基礎操作
// 通過標簽名來獲得指定標簽對象 QAxObject *pBookMarkCode = m_document->querySubObject("Bookmarks(QVariant)", name);// 通過標簽名的位置順序獲得標簽對象 QAxObject *pBookMarkCode = m_document->querySubObject("Bookmarks(QVariant)", 1);//獲得第一個標簽// 選擇指定標簽(說實話不知道干啥的) pBookMarkCode->dynamicCall("Select(void)");// 獲得書簽位置順序 pBookMarkCode->querySubObject("Range")->property("BookmarkID").toInt();// 獲得書簽名字 pBookMarkCode->property("Name").toString();書簽的增刪改查
// 新建一個書簽,位置是當前光標所在位置 void WordManage::insertBookMark(const QString &name, int type, int count) {// 獲取所有的書簽QAxObject *pBookMarkCode = m_document->querySubObject("Bookmarks");QList<QVariant> list;list << name << m_word->querySubObject("Selection")->property("Range");// 新建書簽pBookMarkCode->dynamicCall("Add(QString, QVariant)", list);// 該行代碼是書簽明和書簽信息存儲到二叉樹中,主要用于獲得書簽內容的長度m_markMap.insert(name, TagInformation(Coordinate(currentRow(), currentCol()),type, count)); }// 刪除一個書簽,參數就是需要刪除書簽的名字,該函數會連同內容和書簽都刪除的 void WordManage::deleteBookMark(const QString &name) {if(m_document == nullptr){return;}// 獲取所有標簽QAxObject *pBookMarkCode = m_document->querySubObject("Bookmarks");// 如果不存在,就告訴客戶if(!pBookMarkCode->dynamicCall("Exists(QString)", name).toBool()){qDebug() << "please input existed bookmark";return;}// 獲取指定名稱的書簽QAxObject *bookMarkToBeDel = m_document->querySubObject("Bookmarks(QVariant)", name);if(bookMarkToBeDel){// 選擇該書簽bookMarkToBeDel->dynamicCall("Select(void)");// 選擇當前Active的Pane(如果什么也沒有選中,那么就是一個豎線---對應書簽的位置)QAxObject* selection = m_word->querySubObject("Selection");// 擴大選中的范圍QList<QVariant> mylist;mylist << 1 << m_markMap[name].getCount() << 0;selection->dynamicCall("MoveRight(QVariant, QVariant, QVariant)", mylist);// 刪除這個范圍中的內容(這里是文本內容)selection->dynamicCall("Delete(QVariant, QVariant)", mylist);// 刪除標簽對象,按照我想象的應該有,實際上,沒有并沒有產生什么錯誤// bookMarkToBeDel->dynamicCall("Delete(void)");}return; }void WordManage::updateBookMark(const QString &tag, const QString ¶graph) {if(m_document == nullptr){return;}// 請求所有的標簽QAxObject *pBookMarkCode = m_document->querySubObject("Bookmarks");// 判斷是否存在if(!pBookMarkCode->dynamicCall("Exists(QString)", tag).toBool()){qDebug() << "please input existed bookmark";return;}// 獲取指定標簽QAxObject *bookMarkToBeUpdate = m_document->querySubObject("Bookmarks(QVariant)", tag);if(bookMarkToBeUpdate){bookMarkToBeUpdate->dynamicCall("Select(void)");// 獲得選中的內容QAxObject* selection = m_word->querySubObject("Selection");TagInformation &tagInfo = m_markMap[tag];QList<QVariant> mylist;mylist << tagInfo.getType() << tagInfo.getCount();selection->dynamicCall("Delete(QVariant, QVariant)", mylist);selection->dynamicCall("InsertAfter(QString)", paragraph);tagInfo.setType(TagInformation::TagType::wdCharacter);tagInfo.setCount(paragraph.size());}// 不知道為何通過上面的操作將會把標簽刪除掉,因此在這里添加上insertBookMark(tag);return; }QString WordManage::queryBookMark(const QString &tag) {if(m_document == nullptr){return "";}QAxObject *pBookMarkCode = m_document->querySubObject("Bookmarks");if(!pBookMarkCode->dynamicCall("Exists(QString)", tag).toBool()){qDebug() << "please input existed bookmark";return "";}QAxObject *bookMarkToBeDel = m_document->querySubObject("Bookmarks(QVariant)", tag);if(bookMarkToBeDel){bookMarkToBeDel->dynamicCall("Select(void)");QAxObject* selection = m_word->querySubObject("Selection");QList<QVariant> mylist;mylist << 1 << 0;// 官方有這個操作,加了該行代碼就會拋異常,注釋掉后沒有發現問題// selection->dynamicCall("HomeKey(QVariant, QVariant)", mylist);mylist.clear();mylist << m_markMap[tag].getType() << m_markMap[tag].getCount() << 0;selection->dynamicCall("MoveRight(QVariant, QVariant, QVariant)", mylist);//qDebug() << "in function " << selection->property("Text").toString();return selection->property("Text").toString();}return ""; } m_word->querySubObject("Selection");Use the Selection property to return the Selection object. If no object qualifier is used with the Selection property, Microsoft Word returns the selection from the active pane of the active document window.
總結
以上是生活随笔為你收集整理的QT中关于书签的操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 填充图案的边界线 插件_cad如何给填充
- 下一篇: 为什么国内动漫制作多为3D动漫?3DMA