the first thing to do is review the available compilers / IDE/ tools and make an informed choice. You have g++ installed by default most likely, and can already code in any text editor and compile from commandline for a little program, but a larger project is easier with tools; gui programming specifically CAN be done using only text editors but most have a what you see is what you get or what you see isnt what you get type graphical drag and drop editor. The portable QT for example uses a drag and drop editor that does not show exactly what the final product looks like (its a little frustrating to use due to that, but its also very simple and portable..).
Anyway, a bucket list would look like..
get an IDE you like
choose a windowing/GUI creating library that you like (I don't know how many of these exist in unix, windows only has a few realistic choices).
learn how to deal with makefiles (not required but you may need it)
learn the IDE and makefiles first
make a simple program that reads and writes to the console, like you have already done (can reuse one).
convert that into a gui program and start to learn how to do buttons and text boxes and such in the gui. This is partly a different way of thinking issue... if your existing code did not do it, you will now see why keeping user I/O distinct from any processing/work done is critical to designs. Now, instead of prompting the user, getting input, and doing something to it all in one function, you split that into 3 parts, the getter talks to a text box on the gui, the output may talk to a different text area or draw a picture or whatever, and the processing does whatever else... you will see when you get into it. And you may already design this way, but many people did not get this training in school or in tutorials etc; even if mentioned its unclear about the WHY of it and it does not hit home until you do that first GUI program.
gui programming is also a little different by being event driven. The user can interact with anything you provided at any time, so order of operations issues become more apparent if not careful about that. Like allocating memory before using something, or having a default value before printing something, etc.
I don't know that there is a complete reference. Each of those topics goes deep, but if you search around you may find an overview / get started guide.
Linux is an operating system, platform, ecosystem, and culture. While the continued dominance of Windows and Mac OS for desktop computing causes the uninitiated consumer to assume that Linux is a sort of fringe option for extreme geeks and those who don’t want to pay for an operating system, the truth of the matter is that Linux is the most used and most important operating system on the planet. It powers the web, it powers our infrastructure, it powers the largest supercomputers in the world.
Developing for Linux can be a bit of a challenge, but it can also be extremely rewarding. This short guide will provide you with an introduction to the information and resources you need to get started with Linux programming. It covers four areas of Linux development: contributing to the kernel, building new modules, developing applications for Linux, and Shell scripting.