How to include .txt on Qt
-
@KzR69100
My 2 cents :)I would go with custom class / structure and serialization. That way there is no need for any kind of database / parsing (per say).
Also id squares not by color, because after fill You will loose that color, but by some sort of id and keep it's rectangle. -
@KzR69100 ... @LuGRU gives good advice. But, if you use an ID then your database idea would work as you could make the ID the table entry ID.
The only recommendation I have is to look at what you are trying to solve. What is the future of what you are trying to solve. Then, pick the appropriate solution. I have seen too many times solutions that don't fit the problem to solve because of a "cool tool" or package someone just had to use.
-
I have a function who return me a color (QColor function)
QColor Color(...){ return color; }
like that, and i thought that after the "return color" i will have a "if color == red, add 6 dollars, and replace it by a picture"
the problem is that i will have to do this with many colors so it will take a lot of place in my code, thats why i thought use a database that i will include in my Qt who contained a sort of "x = add 6 dollars, and replace it by a picture"
so i will just have to do :
if color == red, red = x ;
is this possible ?
-
@SGaist said in How to include .txt on QT:
When you create a new topic you have line edit which contains "Enter your topic title here..."
When I was trying to create a new topic for the last 3 days, forum.qt.io opened in Firefox (latest version) for Windows with oversized font header and blue header frame was made of two lines.
Topic input frame was lost due to the bug in html code.In the meantime I have notified Qt about the bug and today Input box for topic title is back.
There is another bug in html code visible in Firefox, since there is no send/post button
I assume, an arrow in upper right corner should replace this button (not easy or user-friendly solution) -
So what u want is
RGB value, ImageName, Cost
So for a given RGB value, u want to look up ImageName, and Cost?
How many of those looks up will you need?
If only 10 or 15 , then a DB might be a bit overkill.Do you need it to be dynamic or could it be 100% predefined?
-
""""So for a given RGB value, u want to look up ImageName, and Cost?"""
Yes exactly,
i got 10 pictures who got 1 colors and 5 - 6 pictures who got 2 colors (if 2 squares beside equal got the same color as the picture who got 2 colors, so i will do 2 square = 1 picture)
but the principal is the 10 picture who got 1 color.
It will be all predefined no dynamic
-
Which size should these picture be ?
-
@KzR69100
Hi
You can make such small number very compact in code.
Add the images to a qres file and store name as :/imagename and
you can get a pixmap directly from it. ( as in Pixmap p(":/img");
Sample code. very basic but could be enough for your case.struct CostInfo { QString ImageName; int Cost; }; QMap<QRgb, CostInfo > Costs = { { QColor(255, 0, 120).rgb(), { ":/imageinres", 10 }}, { QColor(110, 255, 110).rgb(), { "xxxx", 20 }}, { QColor(120, 255, 20).rgb(), { "xxxx", 30 }}, { QColor(130, 255, 90).rgb(), { "xxxx", 40 }}, { QColor(140, 255, 10).rgb(), { "xxxx", 50 }}, { QColor(100, 100, 100).rgb(), { "MEEEE", 60 }}, { QColor(110, 255, 40).rgb(), { "xxxx", 70 }}, { QColor(210, 255, 50).rgb(), { "xxxx", 80 }}, { QColor(30, 255, 60).rgb(), { "xxxx", 3310 }}, { QColor(20, 255, 70).rgb(), { "xxxx", 4410 }}, { QColor(40, 255, 80).rgb(), { "xxx", 150 }}, { QColor(50, 255, 90).rgb(), { "xxx", 160 }} }; void Test() { QColor col = QColor(100, 100, 100); // getColor().. if (Costs.contains( col.rgb() )) { CostInfo& ci = Costs[col.rgb()]; qDebug() << "found:" << "cost:" << ci.Cost << "img:" << ci.ImageName; } }
Running test() gives
found: cost: 60 img: "MEEEE" -
@SGaist i don't know it depends as i said, but in all case i think it will contain like 50 squares.
@mrjj Thanks for your help.
I don't understand the " QMap<QRgb, CostInfo > Costs "and my problem i think, it's if i got a QColor(105,4,85) there will be a problem because it will not found a QColor who corresponds.
So i thought use a "for" to take a value range, and have all possible color, that's correct ?
-
-
I don't understand the " QMap<QRgb, CostInfo > Costs "
Its a associative list. Using QRgb ( the color ) as key and it returns a Costs struct that is the
data associated with that key.
Read about it here
http://doc.qt.io/qt-5/qmap.html
Its a lookup list so to speak. -
and my problem i think, it's if i got a QColor(105,4,85) there will be a problem because it will not found a QColor who corresponds.
Well if not in list, { QColor(105,4,85).rgb(), { "xxxx", 50 }},
then nothing happens as you test with
if (Costs.contains( col.rgb() )) { << test if found
xxxonly do if foundxxx -
-
@mrjj
So if nothing happens that's bad :pWhat do you think about use a "for" ?
Like i don't care if it's a dark red, or a simple red etc..
My question is :
If nothing if found, how function can i use to find the "closer" color to the define color in my struct ?
thanks
-
- If nothing if found, how function can i use to find the "closer" color to the define color in my struct ?
Hi
use the QMapIterator instead of "for"QMapIterator<QString, int> i(map);
while (i.hasNext()) {
i.next();
cout << i.key() << ": " << i.value() << endl;
}
http://doc.qt.io/qt-5/qmap.html#detailsThat allows you to go over all and get the keys. (i.key())
QColor TheColor(i.key())
Then you can calculate if the RGB values for TheColor is
close enough for you to accept it.
For inspiration see here
http://stackoverflow.com/questions/9018016/how-to-compare-two-colorsint diffRed = Math.abs(c1.getRed() - c2.getRed()); int diffGreen = Math.abs(c1.getGreen() - c2.getGreen()); int diffBlue = Math.abs(c1.getBlue() - c2.getBlue()); Those values you can just divide by the amount of difference saturations (255), and you will get the difference between the two. float pctDiffRed = (float)diffRed / 255; float pctDiffGreen = (float)diffGreen / 255; float pctDiffBlue = (float)diffBlue / 255; After which you can just find the average color difference in percentage. (pctDiffRed + pctDiffGreen + pctDiffBlue) / 3 * 100
-
That is very complicated.
QMap is a kind of database, a dictionary that is right ?
I will try with you'r first code :
I don't understand the function void Test.
I got a function who return me a color in QRGB, it named "color" can i say just :
If (color == (the color in the Qmap (i dont know how to call it))){
cost = 50;
image = (red image)
}
?The problem is that i understand QMap, but i don't know how to use it and i'm new to programmation
-
@KzR69100 said in How to include .txt on Qt:
- That is very complicated.
Ok, its plain c++ and maps are often used. I didnt mean to make it
complicated. Using say a DataBase would be 10 times the code.
QMap is a kind of database, a dictionary that is right ?
Yes. You tell it ( whatkey, whatvalue)
and then u can ask for it to return the value for a key.
In this sample we used a color as key.I don't understand the function void Test.
void Test() { // this is the color to look for QColor col = QColor(100, 100, 100); // getColor().. // check the map if it has the color ( suing contains) if (Costs.contains( col.rgb() )) { CostInfo& ci = Costs[col.rgb()]; // take the struct from list qDebug() << "found:" << "cost:" << ci.Cost << "img:" << ci.ImageName; } } > > I got a function who return me a color in QRGB, it named "color" can i say just : > If (color == (the color in the Qmap (i dont know how to call it))){ You cannot use == you must use Contains function. if (Costs.contains( color.rgb() ) ) { CostInfo& ci = Costs[color.rgb()]; // take the struct from list QColor TheColor(i.key()); // this is the base color int Cost=ci.Cost; // use the values. }
- That is very complicated.
-
void Test() { // this is the color to look for QColor col = QColor(100, 100, 100); // getColor().. // check the map if it has the color ( suing contains) if (Costs.contains( col.rgb() )) { CostInfo& ci = Costs[col.rgb()]; // take the struct from list qDebug() << "found:" << "cost:" << ci.Cost << "img:" << ci.ImageName; } }
So the QColor col is my returned color that is right ?
i don't understand the "CostInfo& ci"
And do the size of the picture in the Qmap have to be resized?
PS :
my function is :for(int x = topLeft.x(); x < maxX; ++x) { for(int y = topLeft.y(); y < maxY; ++y) { image.setPixelColor(x, y, colour); if (Costs.contains( colour.rgb() )) { // it will be that ? CostInfo& ci = Costs[colour.rgb()]; } } }
to have all RGB in my struct can i use a "for" (sorry to always say "can i use a for") but the problem is that i want all RGB value with my 15 - 20 pictures
-
-
So the QColor col is my returned color that is right ?
Yes, the Color to look for. -
i don't understand the "CostInfo& ci"
It means a reference to a CostInfo.
We ask the map to return the CostInfo for the key and instead of
having it as a copy we actually point to the one in the list.
so if you doci.Cost = 100; you would update the one in the list.
if we did
CostInfo ci = Costs[col.rgb()];
It would make a copy and ci would be a copy and not point to one in the list.So if it was integers and a normal list.
int a= List[1]; // copy
int &a = List[1]; // a points to the int in index [1]- And do the size of the picture in the Qmap have to be resized?
The qmap only store the file names of the images
I assume you are adding the images to a QRes file
http://www.bogotobogo.com/Qt/Qt5_Resource_Files.php
So all images are build into the program
and then load them with ":/" syntax.
That would be easy and fast.
http://doc.qt.io/qt-5/resources.htmlfor(int x = topLeft.x(); x < maxX; ++x) { for(int y = topLeft.y(); y < maxY; ++y) { image.setPixelColor(x, y, colour); if (Costs.contains( colour.rgb() )) { // it will be that ? YES CostInfo& ci = Costs[colour.rgb()]; int Cost = ci.Cost; Pixmap pix( ci.ImageName ); } } }
to have all RGB in my struct can i use a "for" (sorry to always say "can i use a for") but the problem is that i want all RGB value with my 15 - 20 pictures
Not sure what you are asking here :)
Are you asking how to use a FOR with the QMAP `?
u can doQMapIterator<QRgb, CostInfo >i(Costs); while (i.hasNext()) { i.next(); cout << i.key() << ": " << i.value().Cost << endl; }
Pleases read
http://doc.qt.io/qt-5/qmap.html -