On 4/22/22 05:00, Sean Murphy wrote:
I've got an existing class that will be used in both Qt and non-Qt/non-UI applications. 
One of that functions within that class parses large text files with what is essentially 
a while(!file.eof()) loop. I'd like to add functionality to the class that would provide 
some sort of parsing status back to anyone using the class - for example "currently 
on loop X of N". Essentially I'd like to add the equivalent of a Qt signal.

The problem with using Qt for any length of time is that you forget how to do things in the real world.

Long before C++ was even a gleam in the eye of commercial compiler developers, 
we did this with C via function pointers.

Take a look at NanoGUI, in particular here:
https://github.com/mitsuba-renderer/nanogui/blob/master/src/example4.cpp
line 211 where they set_callback()

After that go look for the Button class source and the set_callback() method. 
You need a different signature, something along the lines of

void (*call_back)( const char *msg, long percentCompleteScaled, long 
recordsRead, long recordsFound);

while (whatever)
{
   do some reading

   if (beenAWhile())
   {
     if (call_back != nullPtr)
     {
        call_back( "Still chewing", (recordCount/recordsRead)*100, recordsRead, 
recordsFound);
     }
    }
}

You will need to look up the exact syntax.

If you are designing cross architecture classes and libraries, you have to stop 
thinking about Qt. It will mess up your design decisions every time. I just 
finished a project using NanoGUI. Getting out of the Signals & Slots mindset 
was a tough and bitter cookie to chew. The reality is, with today's language 
standard you pretty much don't need them unless you need the ability to queue the 
execution to a different thread.

I'm not a fan of lambdas because you can return to an object that has been 
deleted. Having said that, if you are properly controlling the lifespan of your 
object they can be safe.

Oh, just to save you looking it up, here's how they defined set_callback

    /// Set the push callback (for any type of button).
    void set_callback(const std::function<void()> &callback) { m_callback = 
callback; }

--
Roland Hughes, President
Logikal Solutions
(630)-205-1593

http://www.theminimumyouneedtoknow.com
http://www.infiniteexposure.net
http://www.johnsmith-book.com
http://www.logikalblog.com
http://www.interestingauthors.com/blog

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to