qt2.3.10
製作冒泡式彈出對話方塊
snail07年7月第乙個星期製作
製作冒泡式彈出對話方塊主要涉及2個技術要點(主要供觸控螢幕使用) 1
實用的qtimer類的使用
(計算滑鼠在物件上的停留時間確定是否彈出屬性對話方塊)
2 漂亮的對話方塊的繪製(主要是
qwidget::setmask(const qbitmap& bitmap)
的使用)
詳細分析:
qtimer
類的使用
qtimer
的一般性使用
qtimer
*timer = new
qtimer
( myobject );
connect( timer, signal(timeout()),
myobject, slot(timerdone()) );
timer->
start
( 2000, true );// 2 seconds single-shot
注意: 1 當myobject銷毀時,qtimer會自動銷毀。不需要手工刪除。
2qtimer
的 int
start
( int msec, bool sshot = false )
方法第二個引數sshot如果
為ture,則myobject的槽方法只會執行一次。不然的話會一直執行直到qtimer停止或者物件被銷毀為止。
在本程式中如何使用qtimer類 //
標頭檔案 class mainpanel : public qwidget
public slots:
void holdmousetopopupdialog();
//供qtimer鏈結的槽,確定是否彈出屬性框
protected:
virtual void mousepressevent ( qmouseevent * );//這三個虛函式需要被覆蓋用作計時
virtual void mousereleaseevent(qmouseevent *);
virtual void mousemoveevent(qmouseevent *);
private:
qpoint* __popuppoint;
//彈出面板的座標,也就是要顯示屬性的物體
popupinfodialog* __propdialog;//這個屬性框的製作放到後面
qtimer* __mouseholdclicker;//建立乙個qtimer類成員物件};
//**檔案
mainpanel::mainpanel(qwidget *parent, const char *name, wflags fl) :qwidget(parent, name, fl)
void mainpanel::mousepressevent(qmouseevent * e)
void mainpanel::mousereleaseevent(qmouseevent * e)
void mainpanel::mousemoveevent(qmouseevent * e) }
void mainpanel::holdmousetopopupdialog()
在本程式中
繪製漂亮的對話方塊
class popupinfodialog : public qdialog
/*在這裡,大致的實現過程是這樣,qwidget可以通過乙個qbitmap蒙板來大致決定需要顯示哪些部分,我們就通過繪製蒙板來讓qwidget顯示蒙板同樣大小區域來實現繪製任意形狀的對話方塊的效果*/
void popupinfodialog::__refreshmask(int popx, int popy) else
__fillarrow(painter, 0, popy-distancetoborder+20, 50, 100-20, 50, 100+20);
this->move(popx, distancetoborder);
} else
__fillarrow(painter, 0, popy-(dy-20), 50, 200-20, 50, 200+20);
this->move(dx, dy);
} } else else
__fillarrow(painter, __popupwidth, popy-distancetoborder+20, __popupwidth-51, 100-20, __popupwidth-51,
100+20);
this->move(popx-__popupwidth, distancetoborder);
} else
__fillarrow(painter, __popupwidth, popy-dy+20, __popupwidth-51, 200-20, __popupwidth-51, 200+20);
this->move(dx, dy);
} }this->clearmask();
//清除原來的蒙板效果
this->setmask(mask);//新增新的蒙板效果}
/*這個方法通過在給定的三點繪製多邊形,達到繪製屬性框箭頭的效果*/
void popupinfodialog::__fillarrow(qpainter& painter, int p1x, int p1y, int p2x, int p2y, int p3x, int p3y)
最後的效果圖如下:
Qt下TCP程式設計
一 伺服器 1 宣告乙個qtcpserver物件 qtcpserver serverlistener 2 new出物件 this serverlistener new qtcpserver 3 伺服器監聽 qhostaddress ipaddress 192.168.1.1 quint16 ippo...
VS下QT程式設計
參考 1 ui介面,開啟qt designer可以進行編輯,有點像做安卓的layout 2 ui介面所對應的 h 檔案,裡面有你再ui介面各種控制項的 實現 3 工程的 h 檔案,可以宣告你想要實現的操作,新增按鍵對應 槽函式 4 cpp檔案了,可以定義在 h 中宣告的函式,實現對應槽函式。將訊號與...
Qt下TCP程式設計
一 伺服器 1 宣告乙個qtcpserver物件 qtcpserver serverlistener 2 new出物件 this serverlistener new qtcpserver 3 伺服器監聽 qhostaddress ipaddress 192.168.1.1 quint16 ippo...