How to include .txt on Qt
-
No, you will have to resize it, else it will be exactly as in the file.( I assume too big)
the scaled function returns a copy of the pixmap that is scaled to
WIDTH, HEIGHT. so it will fit in your area. -
Yes , that should draw image as 8x8 at i,j.
Note the flag Qt::KeepAspectRatio which means it might not be 8x8 directly but
maybe 8x6 if the original images was not square. AspectRatio means keep the relation between height and width. -
@ambershark Lol
I prefer learn instead of just don't understand what i'm doing, i know i'm very bad to programmation by now but maybe in few years i'il be like mrjj haha !
for the QPoint, i use it here :
void MainWindow::on_push2_clicked() { for (int i=0;i<pixi.width();i+=z){ for (int j=0;j<pixi.height();j+=z){ k=k+0.06; Remplissage(pixi,QPoint(i,j),QSize(z,z),Couleurdominante(pixi,QPoint(i,j),QSize(z,z))); } }
but i use the QPixmap scaledPix .....
in my functionvoid Remplissage(QImage& image, const QPoint& topLeft, const QSize& rectangle, const QColor& colour) {
so it tell that j and i was not declared in this scope
so i declared i and j in my .h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPixmap> #include <QPoint> #include <QSize> #include <iostream> #include <QMapIterator> #include <QMap> namespace Ui { class MainWindow; } struct CostInfo { QString ImageName; int Cost; }; int j; int i; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget* parent = 0); ~MainWindow(); private slots: void on_push_clicked(); void on_push2_clicked(); void on_verticalSlider_sliderMoved(int position); private: Ui::MainWindow* ui; QImage pixi; QPixmap pixa; float k; int a; int z = 1; int b; }; #endif // MAINWINDOW_HH
it will work?
//
it tell that painter was not declared too, so i search to the QPainter class,
it's "void QPainter::drawPixmap(const QPoint & point, const QPixmap & pixmap)" that i should use ?
-
Hi
hehe @ambershark , yes that would be faster but in this case,
declaration and scopes are part of the exercise so hence the amount of posts. :)@Payx
The j and is local variable in your for loops
Yes it will work to make them member of the class but you actually give them to
Remplissage via the QPoint(i,j)
Remplissage(pixi,QPoint(i,j),QSize(z,z),Couleurdominante(pixi,QPoint(i,j),QSize(z,z)));
so inside the Remplissage function, i and j are
int i = topLeft.x();
int j=topLeft.y();- it tell that painter was not declared too, so i search to the QPainter class,
Did you #include<QPainter> ?
Calling it like
painter.drawPixmap(topLeft, scaledPix);
should work. - it tell that painter was not declared too, so i search to the QPainter class,
-
@Payx
oh did you create the painter first ?
Oh You need to create it first. as a variable.
QPainter painter(this);But here comes an issue. you can only use a painter in a PaintEvent function.
So only other way is to have a Pixmap as member and then paint to it in Remplissage
and then later paint the pixmap in PaintEvent.Anyway to paint to an image
QPixmap pix(500,500); // make sure size matches, might need to live as member in class for paintEvent
QPainter painter(&pix);// give pix to painter
...
painter.drawPixmap(topLeft, scaledPix); // -
@Payx
yes that will create a pixmap if the path to image is valid.QPixmap pix( ci.ImageName );
BUT
you seems to store as e "fraise.png" ?
That wont work as there is no path so it cant find it.However if you embed the images via qres file
then the syntax ":/"
will allow to load them.
":/fraise.png"http://doc.qt.io/qt-5/resources.html
These images are then embedded into the .exe file and can be loaded with ":/" in front.If you want to use external files, you must think of how to handle the paths.
-
mrjj: SORRY i edited your post!. browser lag. cannot undo
Im very sorry.- Yes i have already do that u explained to me before ^^
Oh. sorry. Well now we know its working :)
seems good. Note its single ":/" not "://"
and i dont understand the "Give pix to painter"
When you construct the painter you give it the widget normally
QPainter painter(this); <<< "this" being the widget pointer
but when we paint on image then we give pixmap instead of "this"
QPainter painter(&pix); // pix is pixmap and not widget
So basically we tell painter to draw on this picmap and not on a widget. - Yes i have already do that u explained to me before ^^
-
@Payx
So you last issue is the painting of the little image.Since we are not allowed to paint inside Remplissage, you have 2 options.
Do this in paintEvent. ( meaning call Remplissage )
or
let Remplissage paint on a new pixmap and then later paint this new pix in
the real paintEvent function. -
@Payx said in How to include .txt on Qt:
What is the simpliest method ? ahah
I think to paint on image as you can then later just
show in QLabel and might not even need to make a PaintEvent.
This new image should be the size of the red rect one where u scan for colors.
so you will draw the mini images on this new picmap and then its the final pixmap i assume. -
so in this loop
for(int x = topLeft.x(); x < maxX; ++x) { for(int y = topLeft.y(); y < maxY; ++y) {
i can include
QLabel *label = new QLabel(this); foreach( QRgb key, Costs.keys() ) { QColor BaseColor( key ); if (Costs.contains( colour.rgb() ) || IsCloseColor(BaseColor, colour) ) { CostInfo& ci = Costs[colour.rgb()]; // int Cost = ci.Cost; QPixmap pix( ci.ImageName ); QPixmap scaledPix = pix.scaled( 8, 8, Qt::KeepAspectRatio, Qt::SmoothTransformation ); ui->label->setPixmap(pix);
?
-
Because it will not return only one picture, if my picture is 540540 and my rectangle is 88 i cannot just add a label to display 70 picture.
at the end it will have http://www.hostingpics.net/viewer.php?id=354728program.png
by replacing all the rectangle by a picture, it depends the color of the rectangle