Ui namespace in Qt widget projects - c++

I have a Qt widget project called "SeasonCreator" and am wondering about the structure of a Qt widget project.
The ui_seasoncreator.h file is hidden, but when you look into it, it defines a namespace called "Ui" and in it is a declaration of a class SeasonCreator, which inherits from Ui_SeasonCreator, which is the c.
In the seasoncreator.h file, there is also a namespace called "Ui" also with a declaration of a class called "SeasonCreator". When I click to find its original declaration it leads me to the declaration of Ui::SeasonCreator in the ui_seasoncreator.h file.
What is the purpose for these namespace and classes? Do the two definitions relate?
Do any of these Ui::SeasonCreator declarations have anything to do with the custom SeasonCreator class in seasoncreator.h?

What is the purpose for these namespace and classes?
The code in ui_XXX.h is code that is automatically generated for you when you use designer to create a form. It's put into the Ui namespace.
Do the two definitions relate?
I'm assuming you're referring to something that looks like this:
namespace Ui { class SeasonCreator; }
which is a forward declaration of the class that is part of the generated code that gives your class access to the widgets in your custom form.
Do any of these Ui::SeasonCreator declarations have anything to do with the custom SeasonCreator class in seasoncreator.h?
It's what links your custom code together with the generated code. You should probably have a member variable of your custom class called Ui::SeasonCreator *ui, which is the object you use to access the generated Ui classes.

Related

How to add form to existing class?

I have an existing (QCreator build) class derived from QTextEdit
class CCC_MdiChild : public QTextEdit
I like to add GUI form like so
I have no issue creating new form.ui and adding it to the project.
I do not know how to modify existing constructor ( and its definition ) to include "form.ui" .
I am asking for an assistance / help to do that.
Here is my current constructor
Sorry , I did try to format the code but I could not "cut and paste " it as code .
( and I could not reedit it after it was edited once )
Since I did realize my poor formatting any automated comments in that aspect will be ....
The required steps are documented here. For completeness, they are:
Since you've added the .ui file to the project, the UI compiler should generate the corresponding header ui_form.h, which you should #include in the header for your class;
Add a private member to your class of the type defined in this header, which is in namespace Ui and takes its name from your .ui file;
Call the object's setup function as setupUi(this) in the constructor(s) of your class.
Alternatively, you also use multiple inheritance, or avoid including ui headers in header files with the slightly more complicated forward-declared pointer member approach.

wxWidgets - Splitting project into multiple files

I am very new to C++, I'm making this music application using wxWidgets, this is my first project in C++. As of now, I have 4 files, app.hpp and app.cpp which has a class that inherits from wxApp that launches the application, and frame.hpp and frame.cpp which holds the base frame and panel, and all the widgets, and their appropriate functions. I want to move all the functions to a separate file, but I get some errors like there is this function in frame.cpp
void Frame::ClearPlaylist(wxCommandEvent& event)
{
mediaCtrl->Stop();
playlistBox->Clear();
}
I tried moving it in another file called command.cpp and created a new class called command and prefixed all functions to Command:: .... and somethings like the playlistBox here, is a widget which I want in frame.cpp only, as it is a widget, so I did #include frame.hpp and prefixed it with Frame::playlistBox, but that gave a error saying invalid use of non static data member. So do I have to make everything in frame.hpp a static object? Or if anyone has a better solution for organizing a project like this please do share.

Shortcut to create C++ class method?

I have class definition code with function to be crated name
class CAAA
{
public:
public_method
}
I expect to create function stub in header and .cpp with help of some shortcut.
Trying to create class method in fast way:
Shortcut ctrl+1 brings No suggestions available:
Shortcut ctrl+space brings No Default proposal:
How to solve this problem?

Why Qt default project use separate header files for manwindow.cpp?

I just created a Qt default project with a Qt designer form.
The class MainWindow is declared in a mainwindow.h and then included in mainwindows.cpp.
Why is it done this way ? Why not a declaration of this form directly in mainwindows.cpp ?:
class MainWindow
{
...
}
What is the proper way to add my code ? For example, a button that trigger a method.
In C++ you typically put class definitions into header files (.h), and method implementations in source files (.cpp). That allows clients of the class to use the class without having to see the implementation of each function. That also means that when adding a method, you'll typically have to make two changes: add the method to the class definition (in the header) and then add the method's implementation to the .CPP file.
In header file:
class MainWindow
{
void SomeMethod();
};
In source file:
void MainWindow::SomeMethod()
{
// Your code here.
}
The definition of MainWindow class is needed in another file, where an instance of it is constructed in the main function and then shown. That's why the class needs to be defined in a header file.
There are a number of ways to add your own code: for the button you described you could create in entirely in the QtCreator UI, or you could create it "programmatically" in the MainWindow constructor.

Eclipse CDT "New Class" Template

I have been using Eclipse CDT for some time now, and I love it, but there are a few tedious things that I would like to fix up about it.
When you create a new file, one of the options is "New"->"Class". I was wondering if anyone knows of a way to edit the "${declarations}" section of this "Class" template.
To be more specific, I have looked through the "Window"->"Preferences" menu and been unable to find anything. I have changed both "C/C++"->"Code Style"->"Code Templates" and "C/C++"->"Editor"->"Templates". Only the first of the two actually seems to change what appears upon class creation, and it doesn't let me change what is in the "${declarations}" section. Does anyone know how to change this?
Thanks,
Chris
The preference C/C++ -> Editor -> Templates is used by the templates which are inserted manually via Context Assist. Try create a new file, type clas and press ctrl+space for context assist. You should get two assist proposals: a keyword proposal and a template proposal (the latter will also be triggered automatically as default if you type class and press ctrl+space).
Upon selection of the template proposal, a class body will be generated according to the template which you can define in this preference.
As for C/C++ -> Code Style -> Code Templates, this is used in automatic generation. When you use the New Class wizard, the Default C++ Source template and Default C++ Header template are used and the $(declarations) variable is replaced by whatever code is generated by the New Class wizard.
This would mean that you can use a custom template by triggering one of the Editor templates manually, possibly via creating a named class with New Class wizard and then replacing the default class body in header by your custom template.
Or do you suggest that the New Class wizard lacks any important fields and should be extended?
Or do you suggest that the New Class wizard lacks any important fields and should be extended?
Yes private copy and assign operator.
Oooh! Finally found an answer.
In Eclipse CDT (Juno), go to File -> Preferences.
Navigate to the following pane on the left panel of the Preferences window: C/C++ -> Code Style -> Code Templates.
In the Code Templates window, navigate to Files -> C++ Header File.
Edit the header file:
Remove the ${declarations} line, and insert your own stuff.
This has the somewhat unfortunate disadvantage of losing everything that the New Class Wizard would produce. This might invalidate any inherited classes or other things you might select from the New Class Wizard, but I haven't checked.
Here's my C++ Header File Template:
${filecomment}
#ifndef ${include_guard_symbol}
#define ${include_guard_symbol}
${includes}
${namespace_begin}
class ${type_name}
{
public:
/* Default Constructor */
${type_name}();
/* Deconstructor */
virtual ~${type_name}();
private:
/* Disable the following by default */
${type_name}(const ${type_name}& other);
${type_name}& operator=(const ${type_name}&);
};
${namespace_end}
#endif /* ifndef ${include_guard_symbol} */
Hope this helps!