1.資料層 實現拖拽先要子類化qstandarditemmodel
2.檢視層 新增tree控制項
3.渲染層 初始化data
setdata 設定拖拽型別
seticon設定圖示
4.業務層 實現拖拽邏輯
dragenterevent 中過濾拖拽物件
const qmimedata *data=event->mimedata();
int type=data->data("type").toint();
if(type>-1)
dropevent 實現拖拽drop邏輯
const qmimedata *data=event->mimedata();
int type=data->data("type").toint(); ///獲取拖拽型別
class model : public qstandarditemmodel
;model::model(qobject *parent):qstandarditemmodel(parent)
qt::itemflags model::flags(const qmodelindex &index) const
return flags;
}qmimedata *model::mimedata(const qmodelindexlist &indexes) const
return 0;
}qstringlist model::mimetypes() const
主窗體新增物件:model
model;
qstringlist ctrlslist;//可不加
qlistctrlvalue;//可不加
qstandarditem **ctritems;//可不加
初始化變數model=new model(this);
ctrlslist.clear();
ctrlvalue.clear();
載入圖示qicon ico;
ico.addpixmap(qpixmap(":/logo.png"));
qstandarditem * root=model->invisiblerootitem();
載入拖拽物件/1 按鈕
qstandarditem * i1=new qstandarditem("按鈕");
i1->setdragenabled(false); //禁用拖拽根節點
ctrlslist<<"button"<<"combobox"<<"checkbox"<<"imagebutton"<<"radiobutton";
ctrlvalue<<0<<3<<4<<5<<9;
2 編輯框
qstandarditem * i2=new qstandarditem("編輯框");
i2->setdragenabled(false);
ctrlslist<<"lineedit"<<"textarea";
ctrlvalue<<1<<2;
3 顯示
qstandarditem * i3=new qstandarditem("顯示");
i3->setdragenabled(false);
ctrlslist<<"label"<<"progressbar"<<"slider"<<"treeview"<<"tableview"<<"group";
ctrlvalue<<6<<7<<8<<10<<11<<12;
ctritems=new qstandarditem*[ctrlslist.length()];
///init
for(int i=0;isetdata(qvariant(ctrlvalue[i]),qt::userrole+2);
ctritems[i]->seticon(ico);
}add
繫結資料到檢視ui->treeview->setmodel(model);
重寫dragenterevent 過濾拖拽物件
const qmimedata *data=event->mimedata();
int type=data->data("type").toint();
if(type>-1)}
重寫dropevent 實現操作
qstringlist retlist=showinput();
if(retlist.length()<3) return;
const qmimedata *data=event->mimedata();
int type=data->data("type").toint(); ///獲取拖拽型別
if(!checkidvalid(type,retlist[0])) return;
btcur=null;
outinfo("新增控制項:"+retlist[0]);
createctrl(type,retlist,event->pos(),qrect(),false);///建立拖拽的物件
建立控制項
widgetbase *newctrl=null;
if(ret)
}else
}
qt禁止拖動 Qt如何實現拖拽功能?
如上圖所示,如何實現通過拖拽的方式交換兩個按鈕的文字?嚴格的說應該叫拖放方式,它包含了拖動和放置兩個部分。拖動通過drag實現,放下通過dropevent事件實現。該例子有點特殊就是拖動和放下的物件都是按鈕,所以拖動和放下都是在同乙個類中實現。具體實現步驟如下 從qpushbutton類派生乙個類,...
Qt實現不同Treewidget之間拖拽
拖拽是程式設計中經常要用到的,我這裡主要是實習了treewidget之間直接拖拽item,按下ctrl鍵的話是copy,不按ctrl則是move。以下是實現 class treeitemmimedata public qmimedata treeitemmimedata void setdragda...
Qt實現拖拽資料的功能
今天在進行qt程式設計的時候,學習了一下如何自定義ui的樣式,有時候,你在修改別人程式的時候,可能會發現別人程式中的某個控制項ui設計是直接拖上去的。這種情況下如果你想增加該控制項的事件處理,比如拖拽功能。不太好辦,今天在書上找到乙個方法,就是使用qt設計師裡面的提公升,將需要增加事件響應的那個控制...