2013-06-28 48 views
2

我正在開發一個C++和GTK3應用程序,但我被困住了。我創建了一個具有三列的glade的視覺應用程序,其中一箇中間的一個是DrawingArea。在那個DrawingArea中,我想在按下按鈕後在點上繪製一些圓,並在該圓上有不同的鼠標事件(如拖放,雙擊,右鍵單擊...)。我在official documentation之後做了第一件事(按下按鈕後畫了一個圓圈),但問題是我不知道如何做鼠標事件,但是我想到了它,並且我有一些不同的解決方案(我不知道他們是最好成績的解決方案也許有更好的):開羅語上的鼠標事件

  1. 我認爲最好的方法是創建一個信號cairomm背景,但我沒有看到任何這樣做。也許方法是創建一個cairo表面或類似的東西。

  2. 每當我點擊創建一個圓,我將不得不創建一個gtk小部件,我可以在其中處理鼠標事件。這裏的問題是小部件需要具有圓形形狀並且需要可繪製。是否可以創建一個圓形的DrawingArea?這可能是最好的。我看到了創建自定義小部件的方式here

  3. 使用goocanvasmm。這裏的問題是goocanvasmm有一些文檔(我很抱歉,由於我的聲譽,我不能發佈兩個以上的鏈接),我認爲這不是最好的解決方案,我更喜歡使用cairomm。

此應用程序是用C語言編寫的,使用GTK2,使用gnomecanvas繪製圓圈,以簡單的方式向每個圓圈添加信號;現在我將這個應用程序移動到C++和GTK3來更新它。

我對GTK(以及一般的圖形界面)非常陌生,但是我尋找了幾個小時的解決方案,我不知道爲了繼續我的工作,最好的方法是什麼。

謝謝您的幫助:)

回答

0

這是最好用的帆布庫這個如GooCanvas。單單用開羅做這件事需要你在整個繪圖區域聽鼠標事件,並且跟蹤圈子的位置,以便決定鼠標事件屬於哪個圓圈 - 完全是畫布庫已經解決的問題您。

如果您在使用goocanvasmm文檔時遇到問題,可以看看documentation for GooCanvas' C API以及C API如何轉換爲C++的知識,這通常就足夠了。雖然GooCanvasmm documentation似乎對我來說相當廣泛。

+0

謝謝ptomato!我忘了張貼在這裏,最後我用goocanvasmm做了它;這是最好的,最簡單的和實用的解決方案:) – bmenendez

+2

對於2015年後看到這個答案的讀者,goocanvas庫不再維護......不幸的是。 – Oz123