Установите QGridLayout с равным размером ячейки с QWidgets + QPainter.DrawImage, не отображая изображение

Сначала я опишу, что я хочу сделать. Я использую QT для создания оконного приложения. По сути, я хотел сказать, что я хочу, чтобы сетка разметки была 10х10, а все ячейки были 5х5, но без необходимости сначала заполнять сетку!
Я заполняю сетку моим классом Widget, который расширяет класс QWidget. Виджет или QWidget имеет на конструкторе .resize (w, h), так что я, хотя это будет ограничивать w и h виджета при загрузке. Однако, когда я добавляю виджет в сетку, он просто идет по центру, а следующий — куда захочет!

Кроме того, внутри QWidget :: Widget, когда его щелкают и blClicked = true, изображение должно быть загружено … но это не так! * см. код для деталей.

Чего я по сути хочу достичь, так это этот но имея 0 qwidgets в qgridlayout и увеличивая их 1 на 1, сортируя слева направо вверх и т.д.

Спасибо!

Код следующий:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include "widget.h"#include <iostream>class Widget : public QWidget
{
private:
Q_OBJECT
int x,y,w,h;
bool blClicked;
QImage img;
public:
explicit Widget(QWidget *parent = 0);
Widget(int x,int y,int w);
void paintEvent(QPaintEvent* event);
void mousePressEvent (QMouseEvent* event );
int getX();
int getY();
QWidget* toQWidget();
};

#endif // WIDGET_H

widget.cpp

Widget::Widget(int x, int y,int w)
{
this->x = x;
this->y = y;
this->w = w;
this->h = w;
this->resize(this->w,this->h);
blClicked = false;
img.load("car.png");
update();
}

void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setWindow(x,y,w,h);
painter.drawRect(x,y,w,h);
if(blClicked)
{
std::cout << "add image" << std::endl;
painter.drawImage(x,y,img);
}
}

void Widget::mousePressEvent(QMouseEvent *event)
{
std::cout << "mouse click pressed" << std::endl;
blClicked = !blClicked;
update();
}

mainwindow.cpp

void MainWindow::on_btnCreateMap_clicked()
{
using namespace std;
if(ui->lnHeight->text() != NULL && ui->lnWidth->text() != NULL)
{
std::cout << "click" << std::endl;
try {
width = stoi(ui->lnWidth->text().toStdString());
height = stoi(ui->lnHeight->text().toStdString());
//Mapper m(height,width);
l.push_back(new Widget(2,2,10));
ui->gridWidget->addWidget(l[l.size()-1]);
for (int i = 0; i < l.size(); i++)
{
std::cout << "list size" << l.size() << std::endl;
std::cout << "address" << l[i] << std::endl;
}

}
catch (exception& e)
{
cout << "Standard exception: " << e.what() << endl;
}
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector