QT4使用QMdiArea和QScrollArea奇怪的使用麻烦

时间:2011-10-07 12:23:24

标签: qt qt4.7

以下是我正在做的事情:使用MdiArea的mainwindow,我将一个scrollarea小部件(包含图像标签)添加到MdiArea作为子窗口。它不起作用(图片没有显示)。

这是我的代码:

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  ui->setupUi(this);

  QScrollArea sa;
  QPixmap *image = new QPixmap("2.jpg");
  QLabel* imageLabel = new QLabel();
  imageLabel->setPixmap(*image);
  sa.setWidget(imageLabel);
  sa.show();
  ui->mdiArea->addSubWindow(&sa);
}

但是当我直接使用QLabel作为子窗口时,即将最后一行替换为:

ui->mdiArea->addSubWindow(imageLabel);

效果很好。

任何人都知道为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

QScrollArea sa;

这在堆栈上声明QScrollArea。它在构造函数完成后立即被销毁。与new一样,为其他小部件分配它,它应该开始工作。

QScollArea *sa = new QScrollArea;
...
ui->mdiArea->addSubWindow(sa);

(并将sa.更改为sa->。)