One more thing: this should have been one of my first things I tried, but I ran the debugger and got the following message - "The inferior stopped because it received a signal from the operating system
Signal name: SIGSEGV
Signal meaning: Segmentation fault",
and it pointed directly at my destructor for DataPiece, which simply calls "delete this" (even though I never actually call the destructor in my code, it must be an implicit call).
After briefly looking up this error, I primitively discovered that this generally occurs when attempting to illegally access a register in memory. So then I looked at how I initialized my DataPiece, realizing that I actually wasn't calling any of my constructors. So, I passed it a parameter 'this' to act as the QObject * parent, but this still didn't resolve my SIGSEGV issue.