Моя цель: Я хочу нарисовать простой прямоугольник длины и ширины 100, в позиции x = 0, y = 0 в QGraphicsView.Это должно выглядеть примерно так:
Что я сделал до сих пор Я создал объект (в куче) с именем block_realiser в конструкторе домашней страницы (MainWindow), он принимает QGraphicsView в качестве параметра в конструкторе.Я создал QGraphicsScene (в куче) в конструкторе реализации блоков, и в самом его конструкторе я установил эту сцену для представления.В block_realiser есть функция drawRect, которая должна рисовать прямоугольник размером 100x100 в точке (0,0).Код
Block_Realiser::Block_Realiser(QGraphicsView *view, QObject *parent) :
QObject(parent)
{
m_View = view;
m_Scene = new QGraphicsScene;
m_View->setScene(m_Scene);
}
void Block_Realiser::drawRect()
{
m_Scene->addRect(m_View->x(), m_View->y(),
100, 100);
}
Теперь перейдем к моей проблеме.Существует два способа вызова функции drawRect в конструкторе домашней страницы.Один из них - через таймер (после задержки 100 мс), а другой - для непосредственного вызова 1) Через таймер код -
HomePage::HomePage(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::HomePage)
{
ui->setupUi(this);
realiser = new Block_Realiser(ui->graphicsView);
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), realiser, SLOT(drawRect()));
connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater()));
timer->setSingleShot(true);
timer->start(100);
}
Выход:
2) Вызов функции напрямую
Код
HomePage::HomePage(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::HomePage)
{
ui->setupUi(this);
realiser = new Block_Realiser(ui->graphicsView);
realiser->drawRect();
}
Выход
Так может кто-нибудь объяснить мне, чтопроисходит в двух вышеупомянутых случаях?И как я могу достичь своей цели?Ранее я создал подкласс qwidget и переопределил его paintEvent, чтобы достичь того же результата, что и моя цель.Но это не происходит в qgraphicsscene.Пожалуйста, помогите мне.Если какие-либо детали отсутствуют, дайте мне знать.