2013-04-25 30 views
0

實際上,我正在嘗試爲QT 5(VS2010與Qt-Addin)中的QFrame獲取mousePressEvent。在這裏和其他論壇上看到這麼多的建議,但更新的工作,或我不明白princip。也看了scribble的例子,沒有運氣QFrame:創建mousePressEvent

我怎樣才能得到一個QFrame的mousePressEvent?我是否必須創建一個繼承自QFrame的類,然後在main()函數中自行初始化此框架?是不是有一個解決方案,我可以將它綁定到Qt設計器?

試過許多東西,主要是看到了這樣的事情:

protected: 
void TestQtFormsApplication::mousePressEvent(QMouseEvent *qevent) 
{ 
    if (qevent->button() == Qt::LeftButton) 
    { 
     this->close(); 
    } 
}; 

有了這個,我曾經得到了錯誤C2027:使用未定義的類型「QMouseEvent」

+0

你忘記了包括nesessary? 的#include 的#include 2013-04-25 07:25:31

+0

現在C2027錯誤是固定的,忘了,包括所有必要的文件 – Postback 2013-04-25 07:44:25

回答

1

子類QFrame和重新實現mousePressEvent(..)很像你在你的例子中。請記住accept()事件以阻止它傳播到父窗口小部件。您的錯誤是因爲QMouseEvent僅在QWidget頭文件中進行了前向聲明,請自行包含它。

如果您想在Qt Designer中使用您的子類,只需使用QFrame並將其'升級'到您的子類(docs)。

+0

我現在已經促進了QFrame到CustomFrame。 CustomFrame現在是QFrame的子類,但它現在拋出錯誤,它無法找到任何匹配的構造函數,所以我認爲它們沒有從QFrame插入,如何解決這個問題? CustomFrame.h看起來像這樣從上面的舊的實現是在.cpp文件 類DragDropFrame:公共QFrame { 保護: \t無效mousePressEvent(QMouseEvent * QEVENT); }; – Postback 2013-04-25 07:41:29

+1

@Postback Err ...該代碼甚至沒有構造函數!您將需要一個採用'QWidget *'的方法,以便可以指定父項。 – cmannett85 2013-04-25 07:46:51

+1

哦,完全忘了。 thx已經解決了這個問題,現在一切正常 – Postback 2013-04-25 07:52:10