2013-07-02 96 views
0

我將描述我的問題。Qt QGraphicsView:在選項卡內顯示QGraphicsView

我有一個標籤類,它看起來大約是這樣的:

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並添加了我自己的函數,但我不太確定如何做到這一點,以便它適用於我。

謝謝你的回答和評論。

回答

0

這很可能是因爲Tab沒有佈局(或者您甚至沒有添加view作爲Tab小部件的子項)。你沒有顯示構造函數Tab,所以我無法確定。

如果一個選項卡只能包含一個視圖,那麼您需要從QGraphicsView中派生Tab類而不是QWidget。額外的view類成員應該被刪除,並且您可以使用Tab對象,就好像它會是QGraphicsView對象。

如果一個選項卡可以包含其他小部件,那麼您應該向您的Tab對象添加布局,並將視圖和其他子項添加到此佈局。例如:

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

是的!佈局工作的東西。我只是不明白這是如何工作的。你能給我一個鏈接到一些文字,我可以讀到這個嗎?謝謝。 – pizet

+0

首先:http://qt-project.org/doc/qt-4.8/layout.html –