0

我将描述我的问题。

我有一个选项卡类,看起来大致如下:

class Tab : public QWidget
{
public:
  Tab();
   ...
private:
   ...
  QGraphicsView *view;
   ...
};

Tab()我创建view. 现在在我的主窗口中,我想要一个QTabWidget,其中包含一些选项卡,其中每个选项卡显示一个QGraphicsView. 它看起来大约是这样的:

class MainWindow : QMainWindow
{
public:
  MainWindow();
   ...
private:
   ...
  QTabWidget *tabWidget;
   ...
};

MainWindow::MainWindow()
{
  tabWidget = new QTabWidget(this);
  tabWidget->addTab(new Tab, tr("tab 1"));
  tabWidget->addTab(new Tab, tr("tab 2"));

  setCentralWidget(tabWidget);
}

这不会QGraphicsView在选项卡中显示 s。为了使QGraphicsViews 可见,我必须写这样的东西:

MainWindow::MainWindow()
{
  tabWidget = new QTabWidget(this);
  tab1 = new Tab;
  tab2 = new Tab;
  tabWidget->addTab(tab1->view, tr("tab 1"));
  tabWidget->addTab(tab2->view, tr("tab 2"));

  setCentralWidget(tabWidget);
}

并且view必须在课堂上公开Tab,这看起来很糟糕。该类Tab有一些私有函数,用于构造view,我不想viewTab.

如何解决这个问题?

我正在考虑创建一个类,它继承QGraphicsView并添加我自己的函数,但我不太确定如何做到这一点,以便它适用于我。

感谢您的回答和评论。

4

1 回答 1

1

这很可能是因为Tab没有布局(或者您甚至没有添加viewTab小部件的子级)。你没有显示Tab构造函数,所以我不能确定。

如果一个选项卡只能包含一个视图,那么您需要派生TabQGraphicsView而不是QWidget. view应该删除额外的类成员,并且您可以像使用Tab对象一样使用QGraphicsView对象。

如果一个选项卡可以包含其他小部件,那么您应该为您的Tab对象添加一个布局,并将视图和其他子项添加到此布局。例子:

Tab::Tab() {
  QVBoxLayout* main_layout = new QVBoxLayout(this);
  view = new QGraphicsView();
  main_layout->addWidget(view);
}
于 2013-07-02T17:11:23.137 回答