自定義QTextEdit實現拖拽功能

2021-07-05 05:53:02 字數 2622 閱讀 9631

qtextedit是乙個可以顯示各種複雜型別資訊的控制項,比如文字資訊,,html等,有時作為輸入框我們需要實現拖拽展示或傳送一些檔案等,而如果要實現拖拽傳送檔案,這個時候需要過載dropevent事件和insertfrommimedata()函式,在使用這兩個函式的過程中,發現拖拽檔案時,source獲取的資訊都是文字資訊即乙個路徑,而複製功能,貼上也是一段文字資訊,而這樣就有乙個問題了,傳送資訊時,我複製一段存在的檔案的路徑是否把這個當作是檔案呢還是純文字呢,例如:拖拽d盤bak目錄下的11111.png檔案

source->text()得到的結果是file:///d:/bak/11111.png這段文字資訊, 而我複製這個檔案同樣得到的結果也是file:///d:/bak/11111.png, 而我從txt檔案中複製file:///d:/bak/11111.png這段純文字資訊,到時傳送資訊時是判斷傳送檔案呢還是傳送文字資訊呢?
好在經過檢視驗證傳送hasurls可以區分是複製的檔案url還是純文字資訊,當然qmimdata還有其他屬性,但只有這個能區分這種情況,下面請看示例:

customtextedit.h

#ifndef customtextedit_h

#define customtextedit_h

#include #include class customtextedit: public qtextedit

;#endif // customtextedit_h

customtextedit.cpp

#include "customtextedit.h"

:qtextedit(parent)

void customtextedit::dropevent(qdropevent *event)

qstringlist customtextedit::getspliturl(qstring text)}}

return urls;

}void customtextedit::insertfrommimedata(const qmimedata *source)

else if(1 == strlist.size())

if(fileinfo.size() > 50 * 1024 * 1024)

qpixmap pix = getfileiconpixmap(strlist[0]);

emit signalshowicon(pix);

}else if(strlist.size() > 1)

}qpixmap customtextedit::getfileiconpixmap(const qstring &path)

qstring customtextedit::getfilesizeformat(qint64 size)

else if(size < 1024 * 1224)

else if(size < 1024 * 1024 * 1024)

else

return qstring::number(num,'f',2) + " " + strsize;

}bool customtextedit::caninsertfrommimedata(const qmimedata *source) const

mainwindow.h

#ifndef mainwindow_h

#define mainwindow_h

#include #include "customtextedit.h"

qt_begin_namespace

namespace ui

qt_end_namespace

class mainwindow : public qmainwindow;};

#endif // mainwindow_h

mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

mainwindow::mainwindow(qwidget *parent)

: qmainwindow(parent)

, ui(new ui::mainwindow)

mainwindow::~mainwindow()

void mainwindow::initview()

void mainwindow::initdata()

void mainwindow::slotshowfileicon(const qpixmap &pix)

main.cpp

#include "mainwindow.h"

執行結果:

從d盤bak目錄下拖拽11111.png檔案到textedit

複製file:///d:/bak/11111.png到textedit

自定義Toast實現自定義Toast布局

平時我們使用toast的時候都是這樣的一種方法 toast toast toast.maketext context,duration 現在我們來自定義下toast的布局,首先看下toast建立時的源 public static toast maketext context context,char...

實現自定義IFormattable

using system using system.collections using system.linq using system.text using system.collections.generic using system.runtime.serialization namespac...

自定義tabcontrol實現

using system using system.collections generic using system.drawing using system.linq using system.text using system.windows forms namespace shengxinso...