Qt Framework: Как отобразить QGraphicsView в макете? - PullRequest
3 голосов
/ 22 декабря 2011

У меня проблемы с отображением QGraphicsView в объекте QVBoxLayout, и я понятия не имею, что не так. Мой код компилируется, поэтому никаких ошибок не выдается. Вот мой простой код. (Я новичок в Qt и C ++). Внизу я добавляю виджет QPushButton к макету, и это хорошо видно. Заранее спасибо за помощь!

QGraphicsScene scene;
QGraphicsView view(&scene);
view.setBackgroundBrush(QImage(":/images/bg/tile.png"));
view.setCacheMode(QGraphicsView::CacheBackground);
QPixmap pixmap("images/icons/dsp.gif");
QGraphicsPixmapItem* dsp = scene.addPixmap(pixmap);
view.show();
vlayout->addWidget(&view);
vlayout->addWidget(new QPushButton("some button here"));

1 Ответ

3 голосов
/ 22 декабря 2011

Недостаточно контекста, поэтому я не могу точно сказать, что происходит.Но если они есть в функции, то вы объявляете локальные переменные, которые исчезают после выхода из функции.Если вы находитесь в основном, ваш код должен выглядеть примерно так, но он, вероятно, вылетит:

 QApplication app(argc, argv);
  QGraphicsScene scene;
  QGraphicsView view(&scene);

  QWidget widget;
  view.setBackgroundBrush(Qt::red);
  QVBoxLayout vlayout;
  widget.setLayout(&vlayout);
  vlayout.addWidget(&view);
  vlayout.addWidget(new QPushButton("some button here"));
  widget.show();

Я рекомендую динамически размещать объекты:

int main(int argc, char* argv[]){

  QApplication app(argc, argv);
  QGraphicsScene* scene = new QGraphicsScene;
  QGraphicsView* view = new QGraphicsView(scene);

  QWidget *widget = new QWidget;
  view->setBackgroundBrush(Qt::red);
  QVBoxLayout* vlayout = new QVBoxLayout(widget);

  vlayout->addWidget(view);
  vlayout->addWidget(new QPushButton("some button here"));
  widget->show();
  return app.exec();
}

Незабудьте удалить родительский объект, чтобы он не пропускал память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...