Qt QGraphicsView:在选项卡中显示QGraphicsView

Qt QGraphicsView: Displaying QGraphicsView inside a tab

本文关键字:QGraphicsView 显示 Qt 选项      更新时间:2023-10-16

我将描述我的问题。

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

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。为了使QGraphicsView可见,我必须写这样的东西:

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继承的类,并添加我自己的函数,但我不太确定如何做到这一点,以便它对我有效。

感谢您的回答和评论。

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

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

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

Tab::Tab() {
  QVBoxLayout* main_layout = new QVBoxLayout(this);
  view = new QGraphicsView();
  main_layout->addWidget(view);
}