Re: Emitting and/or Catching a signal



On Sat, 2010-03-27 at 21:43 -0400, ArbolOne wrote:
> OS WinXP SP3
> MinGW and MSYS= latest!
> GCC
> ~~~~ 
> Reading specs from D:/XWin/mingw/bin/../lib/gcc/mingw32/3.4.5/specs
> Configured with: ../gcc-3.4.5/configure --with-gcc --with-gnu-ld
> --with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw
> --enable-threads --disable-nls --enable-languages=c,c
> ++,f77,ada,objc,java --disable-win32-registry --disable-shared
> --enable-sjlj-exceptions --enable-libgcj --disable-java-awt
> --without-x --enable-java-gc=boehm --disable-libgcj-debug
> --enable-interpreter --enable-hash-synchronization
> --enable-libstdcxx-debug
> Thread model: win32
> gcc version 3.4.5 (mingw-vista special)
> ====================================================
> 
> OK, I give up!
> I have been trying to emit a signal from one of my classes to another,
> but it has proven to be beyond me. I am not an expert C++ programmer
> let alone a GUI programmer, so bare with me please. Below is a snip of
> the source code; since the class is so specific and at a such early
> stage there aren't that many lines of code, nevertheless, my apology
> for the use of the band-width; in the future I will try to post the
> code on a URL site. 
> I would like to emphasize that any help and or observations are most
> welcome as well as an observation  
> 
> Now, the problem with my program is that when I tried to compile it it
> tells me that there is an error in "...\include\sigc++-2.0\sigc
> ++\functor\stot.h in line 103

This is not very specific. Please always show the exact compiler error
message you get.

> //// -- file.cpp SNIP ******
> Menu::Menu() {
>     ..........
>     //Command bar
>     RefActionGroup->add( Gtk::Action::create("MenuFile", "_File") );
>     RefActionGroup->add( Gtk::Action::create("New", Gtk::Stock::NEW,
> "_New",        "Create a new fle"), sigc::mem_fun(*this, &
> Menu::onActionActivated));
>        ..........
> /******* THIS IS THE CODE CAUSING THE PROBLEM **************/
>     RefActionGroup->add( Gtk::Action::create("Quit",
> Gtk::Stock::QUIT,"Quit", "Exit application"),  sigc::mem_fun(*this, &
> Menu::signal_quit));
>       .........
> }

The function you provide here as a callback (Menu::signal_quit) needs to
match what RefActionGroup->add expects. According to the documentation
it needs to be a function returning void and taking no arguments. The
function you pass, Menu::signal_quit, does not return void though
(according to your code below).

I am not sure what this code is supposed to do. If you want to emit your
quit signal when the action is activated, then supply a custom function
as you do for your other action, and emit the signal in that function.

> //// -- file.hpp SNIP ******
> class Menu : virtual public Gtk::VBox {
> public:
>         //signal accessor
>         typedef sigc::signal< my_enum::error_t> type_signal_end;
>         type_signal_end signal_quit();
> 
> protected:
>         type_signal_end m_signal_end1;
>        .........
> private:
>         .........
>     }; //class
> ========================
> // tester.hpp
> class Tester : virtual public Gtk::Window {
>         public:
>                   ....
>         private:
>         Menu menu;
>         void quit(){this->hide();}
> };
> // tester.cpp
> Tester::Tester(){
>              ..............
>             ///////////
>             menu.signal_quit().connect( sigc::mem_fun(*this,
> &Tester::quit) );
>            ///////////
>            ................
> }
> 
> Can any body help?

Armin




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]