gpt4 book ai didi

c++ - Qt QGraphicsView : Displaying QGraphicsView inside a tab

转载 作者:行者123 更新时间:2023-11-28 07:32:12 24 4
gpt4 key购买 nike

我将描述我的问题。

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

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类有一些私有(private)函数,用于构造view,我不希望viewTab中公开

如何解决这个问题?

我正在考虑创建一个类,它继承自 QGraphicsView 并添加我自己的函数,但我不太确定如何执行此操作以便它适合我。

感谢您的回答和评论。

最佳答案

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

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

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

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

关于c++ - Qt QGraphicsView : Displaying QGraphicsView inside a tab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17431139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com