Questions Concerning colorizing text in Ubuntu terminal.
-
Beside the issue of having two main function, your printColorized version won't show anything on the console unless
text
contains something similar to the regular expressions you wrote there which neither "hello" nor "there is no text" do. -
Totally missed the two main functions, kind of distracted, my heart is in a-vib, beating 160 beats a minute.
Redid the code.#include <QApplication> #include <QLabel> #include <QWidget> #include <QRegularExpression> #include <QCoreApplication> #include <QString> #include <QtDebug> int main(int argc, char *argv[ ]) { QApplication app(argc, argv); QLabel hello("<center>Welcome to my first Qt program</center>"); hello.setWindowTitle("My First Qt Program"); hello.show(); return app.exec(); } void printColorized(const QString& text) { if (text.contains(QRegularExpression("My First Qt Program"))) { qDebug() << "\e[1m\e[91m" << text << "\e[0m"; } if (text.contains(QRegularExpression("Welcome to my first Qt program"))) { qDebug() << "\e[91m" << text << "\e[0m"; } { QCoreApplication app(argc, argv); printColorized("My First Qt Program"); printColorized("Welcome to my first Qt program"); return 0; } }
I thought this is what colored the text.
if (text.contains(QRegularExpression("My First Qt Program"))) { qDebug() << "\e[1m\e[91m" << text << "\e[0m";
-
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
I thought this is what colored the text.
It does. But I'm afraid your code is not right:
-
You have
QApplication app(argc, argv);
inmain()
. You must not haveQCoreApplication app(argc, argv);
in another function, likeprintColorized()
. -
You have
printColorized()
doing the calls toprintColorized()
. You don't want that, and besides nothing inmain()
callsprintColorized()
in the first place.
int main(int argc, char *argv[ ]) { QApplication app(argc, argv); QLabel hello("<center>Welcome to my first Qt program</center>"); hello.setWindowTitle("My First Qt Program"); hello.show(); printColorized("My First Qt Program"); printColorized("Welcome to my first Qt program"); return app.exec(); } void printColorized(const QString& text) { if (text.contains(QRegularExpression("My First Qt Program"))) { qDebug() << "\e[1m\e[91m" << text << "\e[0m"; } if (text.contains(QRegularExpression("Welcome to my first Qt program"))) { qDebug() << "\e[91m" << text << "\e[0m"; } }
Don't forget all this is going to do is show a colorized message in the console of Qt Creator, or maybe in a terminal if you run it that way. This will have nothing to do with the UI label you show, which will just show the original text. I don't know if that is what you intend. If you are expecting it to appear in the UI/on the label, it won't.
-
-
Tried the new code no luck.
I believe I've pester you guys enough!
I want to thank everyone who helped!
I have other issues I need to tend to.
Again, thanks guys it's been fun!Discovery!!
All this time I have been adding new code into the testmain.cpp.
All it takes to run the project/program was the compiled file, I believe it is a bin file.
I removed all files and it ran, removed that one and it errored.
So those file are not being read at all.
So now I know you have to recompile it when adding new code to the file.
Again Thanks for all the help guys! -
Ok, JonB,
I tried recompiling with your code and got an error.
I tried searching online but there is nothing about it I cannot believe I am the first person to get this error.cougarxr7@GoneSpy:~/Programs/First Qt Program$ make g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o testmain.o testmain.cpp testmain.cpp: In function ‘int main(int, char**)’: testmain.cpp:16:9: error: ‘printColorized’ was not declared in this scope 16 | printColorized("My First Qt Program"); | ^~~~~~~~~~~~~~ make: *** [Makefile:363: testmain.o] Error 1 cougarxr7@GoneSpy:~/Programs/First Qt Program$
error: ‘printColorized’ was not declared in this scope
Have you seen that error before?
Funny, the program still ran fine, no color though. -
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
error: ‘printColorized’ was not declared in this scope
Simply put the printColorized function definition before main()...
-
Sorry to say, I'm back!
If I may ask once again for your assistance!
I am at a new point with this colorizing text project.
Let me explain what I am doing/done..
Knowing now how to recompile my friends code I have been doing that with the color code from you guys.
After many attempts and compiling errors I did get it to compile without any errors.
In my friends program is a logger folder of which I created a file named colortext.cpp. (see pic)
I am only trying color 2 words at this time, "update and check", once they show up in color more can be added.
Here is the code:#include "logger.h" void printColorized(const QString& text) { if (text.contains(QRegularExpression("update"))) { qDebug() << "\e[1m\e[92m" << text << "\e[0m"; } if (text.contains(QRegularExpression("check"))) { qDebug() << "\e[93m" << text << "\e[0m"; } } int logger(int argc, char **argv) { QCoreApplication app(argc, argv); printColorized("update"); printColorized("check"); return 0; }
Plus logger.h
#ifndef LOGGER_H #define LOGGER_H #include <QDir> #include <QFile> #include <QDateTime> #include <QTextStream> #include "Settings/settingstructure.h" #include "Core/version.h" #include "logprimitive.h" #include <QRegularExpression> ( "These 4 include line were a part of the original #include <QCoreApplication> code. I moved them here.") #include <QString> #include <QtDebug> class Logger { public: Logger(); bool init(const QString &applicationPath, const SettingStructure &settings); void stop(); void logEvent(const QString &messageType, const QString &message); private: // path variables const QString _logDirectory = "../log"; const QString _logLabel = "MasterServer-" + SHORT_VER; QString _logPath = ""; // local variables int _cyclePeriod; QString _logFileName; QString _suppressLog; QString _suppressDisplay; // file i/o QFile _logFile; private: bool cycleLogFile(); bool openLogFile(); void closeLogFile(); bool writeLogFile(const QString message); }; #endif // LOGGER_H
Here is a link to the folders where you can view the source files.
http://git.333networks.com/MasterServer-Qt5/tree/src
The good news is, it compiles! No errors! Bad news is no color text.
I am hoping you guys can see my mistakes and help me fix this.
I believe this is so close to working!
Thanks! -
After many attempts of trying to get this to work I have reason to believe QT does not support colorizing text in a linux terminal while scrolling updated information , like it is so easily done in Perl.
I did an online search with google and duckduckgo and got one hit, this post.
"Colorizing text in linux terminal with QT"
That was a surprise.
What was a major surprise was when I searched the index on Qt Creator for "Color Text" , and got nothing!
Nothing, I could not believe it!
Even though we were able to get color text in that, "My First QT Project", the colored text was in the terminal and not in the project.
I would of thought it would of been done something like this.
Original Code.#include <QApplication> #include <QLabel> #include <QWidget> int main(int argc, char *argv[ ]) { QApplication app(argc, argv); QLabel hello("<center>Welcome to my first Qt program</center>"); hello.setWindowTitle("My First Qt Program"); hello.resize(400, 400); hello.show(); return app.exec(); }
Modified code. Here we lose the window.
void printColorized(const QString& text) { if (text.contains(QRegularExpression("My First Qt Program"))) { qDebug() << "\e[1m\e[91m" << text << "\e[0m"; } if (text.contains(QRegularExpression("Welcome to my first Qt program"))) { qDebug() << "\e[91m" << text << "\e[0m"; } } ```int main(int argc, char *argv[ ]) { QApplication app(argc, argv); QLabel hello("<center>Welcome to my first Qt program</center>"); hello.setWindowTitle("My First Qt Program"); hello.show(); printColorized("My First Qt Program"); printColorized("Welcome to my first Qt program"); return app.exec(); }
Original Code. with modding, I have done this below as an example of how I think Qt should be to allow for the simplicity of this to work.
#include <QApplication> #include <QLabel> #include <QWidget> #include <QTextSize> #include <QTextColor> int main(int argc, char *argv[ ]) { QApplication app(argc, argv); QLabel hello("<center>Welcome to my first Qt program</center>"); QTextSizeHello("<center>12<center>); QTextColorHello("<center>Bold Red<center>"); hello.setWindowTitle("My First Qt Program"); QtextSizeWindowTitle("14"); QTextColorWindowTitle("Bold Blue"); hello.resize(400, 400); hello.show(); return app.exec(); }
The above code is just an example of how I would think that the code should/would/could work. Window would open with text in a different size and different colors.
Does anyone know if it is possible to get a Dev from Qt to chime in on this?
It would be good to find out if Qt even supports this.
I want to thank all of you guys for your assistance in helping me with this! I plan to keep on trying to get this to work, and I hope I am successful. -
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
Does anyone know if it is possible to get a Dev from Qt to chime in on this?
I don't know why Qt should care about colored text output in a console at all. Qt is a GUI framework.
-
Qt (software)
"Non-GUI programs can also be developed, such as command-line tools and consoles for servers." -
@Cougar-0 Still no reason to support some kind of coloring for a special terminal type...
-
@Cougar-0 I'm not aware that any program can modify the text size in a terminal. And coloring is terminal-specifc.
Not a Qt domain. -
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
Because you can in perl.
You can't change the size of a terminal output in any programming language. It's the terminal which decides what it displays.
-
I realize I was mistaken about size in terminal, that's preset in terminal.
But when you write a program such as "My first qt program", with that popup window I would think you should be able to control/set the text size and color.
If not no biggy. I promise I won't lose any sleep over it. -
@Cougar-0
You are mixing your expectations of what should happen in a terminal versus creating Qt *windows^ and thinking the same code will work there.Perl does not have any particular support for "colorizing text in a terminal". Your Perl script simply writes "escape sequence" characters to the terminal and the terminal interprets that to color the text.
You can do what the Perl script does equally from any C or C++ program. Just write the same sequences to
stdout
, and if you run it from a terminal/Command Prompt it will behave like the Perl script.Qt is not a programming language. It's a toolkit/library you can use from C++ (or Python). It offers many features, most notably the ability to have a UI with windows etc. But once you start using those (
QWidget
,QLabel
,QMainWindow
etc.) they don't allow colorized text in the way a terminal does. You can change text color/size/font etc. in aQLabel
, and other Qt widgets, just not the same way as when you are writing text to a terminal.In short: in
main()
just output the same characters as the Perl does viaprintf()
orcout
or whatever from C/C++. That is what the Perl program does. -
I think there might be some misunderstanding here somehow.
I demonstrated how to colorize the output of qDebug. Tested it on Linux, in a terminal, to be sure (the second version of my code).
I am currently thinking you might be talking about the output that is within Qt Creator, which I don't know if supports the ANSI/VT100 color codes used for standard terminals.
-
@Cougar-0 said in Questions Concerning colorizing text in Ubuntu terminal.:
My first qt program", with that popup window
Now you're talking about a GUI, not a terminal. Please clarify to yourself what you really want to achieve.