Add to Qt GUI logger functionality
-
Do you have integer_interface(int &argc, char *argv[]) : QApplication(argc, argv) somewhere?
ye I have it in an integer_interface.cpp, looks like this
#include "integer_interface.h" integer_interface::integer_interface(int &argc, char *argv[]) : QApplication(argc, argv) { }
??
I have it declared in my logger_widget.h class file (if you also see my previous reply), but was thinking maybe should be declared outside of the class?
Or maybe you meant something else from this
@Gaetano03 said in Add to Qt GUI logger functionality:
I have it declared in my logger_widget.h class file (if you also see my previous reply), but was thinking maybe should be declared outside of the class?
You should also instantiate it somewhere.
-
@Gaetano03 said in Add to Qt GUI logger functionality:
I have it declared in my logger_widget.h class file (if you also see my previous reply), but was thinking maybe should be declared outside of the class?
You should also instantiate it somewhere.
I have it declared and instantiated both in the logger_widget.h class among the private members
private: Ui::logger_widget *ui; integer::logger::errors err_init; integer::logger::integer_logger& logger = integer::logger::integer_logger::get_instance(); integer_interface *myApp = qobject_cast<integer_interface *>(qApp);
and in the static log function
void log(std::string message) { integer_interface *myApp = qobject_cast<integer_interface *>(qApp); emit myApp->libraryLogged(message); }
as suggested by @JonB
PS
@JonB doing as you suggested as sanity check with the following linesinteger_interface *myApp = qobject_cast<integer_interface *>(qApp); Q_ASSERT(myApp);
gives a bunch of errors not sure I understand:
logger_widget.h:42:14: C++ requires a type specifier for all declarationslogger_widget.h:42:5: Expected ')' 0:0: :42:5: note: to match this '(' logger_widget.h:42:14: Duplicate member 'myApp' logger_widget.h:41:24: previous declaration is here
-
I have it declared and instantiated both in the logger_widget.h class among the private members
private: Ui::logger_widget *ui; integer::logger::errors err_init; integer::logger::integer_logger& logger = integer::logger::integer_logger::get_instance(); integer_interface *myApp = qobject_cast<integer_interface *>(qApp);
and in the static log function
void log(std::string message) { integer_interface *myApp = qobject_cast<integer_interface *>(qApp); emit myApp->libraryLogged(message); }
as suggested by @JonB
PS
@JonB doing as you suggested as sanity check with the following linesinteger_interface *myApp = qobject_cast<integer_interface *>(qApp); Q_ASSERT(myApp);
gives a bunch of errors not sure I understand:
logger_widget.h:42:14: C++ requires a type specifier for all declarationslogger_widget.h:42:5: Expected ')' 0:0: :42:5: note: to match this '(' logger_widget.h:42:14: Duplicate member 'myApp' logger_widget.h:41:24: previous declaration is here
@Gaetano03
Look, can you please show yourmain()
function now. I have a funny feeling your still haveQApplication a(argc, argv);
there, and what do you think you actually need instead of that? -
I have it declared and instantiated both in the logger_widget.h class among the private members
private: Ui::logger_widget *ui; integer::logger::errors err_init; integer::logger::integer_logger& logger = integer::logger::integer_logger::get_instance(); integer_interface *myApp = qobject_cast<integer_interface *>(qApp);
and in the static log function
void log(std::string message) { integer_interface *myApp = qobject_cast<integer_interface *>(qApp); emit myApp->libraryLogged(message); }
as suggested by @JonB
PS
@JonB doing as you suggested as sanity check with the following linesinteger_interface *myApp = qobject_cast<integer_interface *>(qApp); Q_ASSERT(myApp);
gives a bunch of errors not sure I understand:
logger_widget.h:42:14: C++ requires a type specifier for all declarationslogger_widget.h:42:5: Expected ')' 0:0: :42:5: note: to match this '(' logger_widget.h:42:14: Duplicate member 'myApp' logger_widget.h:41:24: previous declaration is here
@Gaetano03 said in Add to Qt GUI logger functionality:
integer_interface *myApp = qobject_cast<integer_interface *>(qApp); Q_ASSERT(myApp);
If that is in a
.h
where you are declaring member variables in a class definition you cannot add arbitrary C++ statements to execute..... Put theqobject_cast<>
in the constructor, where you can verify it. -
@Gaetano03
Look, can you please show yourmain()
function now. I have a funny feeling your still haveQApplication a(argc, argv);
there, and what do you think you actually need instead of that? -
@JonB
you have the right funny feeling, just realized how silly I was.Everything works fine now and I get stuff printed on my QPlainText, at least for now XD.
Thanks a lot, really!
I really appreciate
@Gaetano03
Yeah, do you get the point? You can subclassQApplication
to add whatever you want, but then you must create aSubclassedApplication
not the original base classQApplication
to use it. Just like any other subclassing.qApp()
macro returnsQApplication *
-type pointer, for whatever (single)QApplication
instance has been created. If you derived and created the derived instance,qApp
won't return that derived type (though it will return the correct derived instance). So to call methods/access variables you defined in your subclass that's why weqobject_cast<SubclassedApplication *>(qApp)
. -
@Gaetano03
Yeah, do you get the point? You can subclassQApplication
to add whatever you want, but then you must create aSubclassedApplication
not the original base classQApplication
to use it. Just like any other subclassing.qApp()
macro returnsQApplication *
-type pointer, for whatever (single)QApplication
instance has been created. If you derived and created the derived instance,qApp
won't return that derived type (though it will return the correct derived instance). So to call methods/access variables you defined in your subclass that's why weqobject_cast<SubclassedApplication *>(qApp)
.@JonB
Yes I got the point, thanks also for this explanation!! That helps a lot understanding what I am doing behind the lines!!!I have to admit that I worked so much on the library that I forgot for a while a main calling it and launching the app was even existing XD