2017-09-26 10 views
0

カスタムGUIアプリケーションのプログラミングを開始しました。しかし、私はどのようにいくつかの方法でボタンを接続する方法を知る必要があります。例えば
は私が持っている:
ボタンをクリックすると呼び出されるメソッドとボタンを接続する方法

class Button 
{ 
private: 
    string Text; 
    /*etc*/ 
public: 
    string GetLabel(); 
    void SetLabel(string label); 
    void Connect(/*method name as param*/) 
    { 
     //TODO -this is that thing i need help here 
     /*this is method for connecting button with method, which will be 
      called on click, which im asking for help*/ 
    } 
}; 

class Window 
{ 
private: 
    int sizeX,sizeY; 
public: 
    void Put(Button * button,int _hpos,int _vpos); 
    void Show(); 
    /*etc */ 
}; 

class MyWindow : public Window 
{ 
public: 
    MyWindow() 
    { 
     InitializeComponents(); 
    } 
    void Run() 
    { 
     this -> Put(btn1,10,10); //put button in window at position 10,10 
     this -> Show(); 
    } 
private: 
    Button * btn1; 
    void InitializeComponents() 
    { 
     btn1 = new Button(); 
     btn1 -> Connect(on_btn1_click); //select which method will be called when user click this button, which I dont know how to do so pls help 
    } 
    void on_btn1_click() //this method is called when user click the button 
    { 
     //do something if user clicked btn1 
    } 

}; 

int main() 
{ 
    MyWindow * win1 = new MyWindow(); 
    win1 -> Run(); 
    return 0; 
} 

したがって、ユーザーがボタンをクリックしたときに呼び出されますmywindowのクラス内部のプライベートメソッドがある(BTN1)。メソッドConnect()は、ユーザーがボタンをクリックしたときに呼び出すメソッドを選択します。

+1

どのGUIフレームワークを使用していますか?どのプラットフォームまたはオペレーティングシステムを使用していますか? –

+0

これはcursesに基づいています。私はcursesをより使いやすくするために、いくつかのフレームワークを作成しようとしていました。 – T0maas

答えて

0

マウスがボタン/ UIオブジェクトの上にあるかどうかを確認することができます。

const Button& GetObjectBelowMouse(int xMousePos, int yMousePos) // This would be equavalent to your Connect type 
{ 
    // all buttons would be your container of buttons/GUI objects. 
    for(const auto& button : allButtons) 
    { 
     // top,bottom,left,right would be the bounding rectangle that encapsulates the coordinates of the object 
     if((xMousePos > button.left && xMousePos < button.right) && (yMousePos > button.bottom && yMousePos < buttom.top)) 
     { 
      return button; 
     } 
    } 
    // in this case we have a different constructor that creates a "empty" button that has no function 
    return Button(NO_OBJECT); 
} 

// the usage would be something like 

int main() 
{ 
    /* 
     .. create button, set it's possition, etc 
    */ 

    // Option 1 
    if(GetObjectBelowMouse(mouse.x, mouse.y).type != NO_OBJECT) 
    { 
     // Do whatever you want, you know that the user has clicked a valid object 
     button.Foo(); 
    } 

    // Option 2 
    GetObjectBelowMouse(mouse.x, mouse.y).Foo(); // You know that every button has a foo object, and that NO_OBJECT has a foo that does nothing, so you don't need to compare if it is NO_OBJECT or not. 
} 
+0

私はQtフレームワークで何かを見つけました。 QObject :: connectというメソッドがあります。それは私にとって完璧に機能しますが、問題があります。 Qtは* .soの大きなammoutを使用するので、Qtを使わないことに決めました。ですから、私はQObject :: connect()の代替案を作成する方法を手助けする必要があります。 – T0maas

関連する問題