QT2 3 10下冒泡式彈出式對戶框的製作

2021-04-13 04:15:40 字數 3472 閱讀 3223

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