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...