2015-10-16 74 views
0

如何更改QTabWidget標籤中的QWidget,只知道標籤索引?只知道標籤索引,更改QTabWidget小部件的內容

void MainWindow::on_toolButton_2_clicked() 
{ 
    TextItem myitem = new TextItem;//is a class TextItem : public QWidget 
    int tabindex = 2; 
    ui->tabwidget1->//i don't have a idea to change widget of a Tab by tab index 
} 
+0

它是什麼,你想要它做什麼? – Shawn

回答

1

很難說哪種解決方案最適合您的問題,因爲您沒有解釋太多。

第一種方法將包裝容器QWidget內的每個選項卡的內容:如果你想改變一個選項卡的內容,你只需要改變容器QWidget的內容。

另一種方法是刪除帶有舊內容的選項卡,並用新內容創建一個新選項。


編輯: 這裏是一個快速的實現我上面提到的第一種方式:

mainwindow.h:

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    void buildTabWidget(); 

private slots: 
    void changeTabContent() const; 

private: 
    QTabWidget* tab_widget; 
}; 

#endif // MAINWINDOW_H 

mainwindow.cpp:

#include "mainwindow.h" 

#include <QLabel> 
#include <QLayout> 
#include <QPushButton> 
#include <QTabWidget> 

void MainWindow::buildTabWidget() 
{ 
    // The container will hold the content that can be changed 
    QWidget *container = new QWidget; 

    tab_widget = new QTabWidget(this); 
    tab_widget->addTab(container, "tab"); 

    // The initial content of the container is a blue QLabel 
    QLabel *blue = new QLabel(container); 
    blue->setStyleSheet("background: blue"); 
    blue->show(); 
} 

void MainWindow::changeTabContent() const 
{ 
    // retrieve the QWidget 'container' 
    QWidget *container = tab_widget->widget(0); 
    // the 'blue' QLabel 
    QWidget *old_content = dynamic_cast<QWidget*>(container->children()[0]); 
    delete old_content; 

    // create a red QLabel, as a new content 
    QWidget *new_content = new QLabel(container); 
    new_content->setStyleSheet("background: red"); 
    new_content->show(); 
} 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    buildTabWidget(); 
    QPushButton* push_button = new QPushButton("Change content"); 
    connect(push_button, SIGNAL(clicked(bool)), this, SLOT(changeTabContent())); 

    QHBoxLayout *layout = new QHBoxLayout; 
    layout->addWidget(tab_widget); 
    layout->addWidget(push_button); 

    QWidget *window = new QWidget(); 
    window->setLayout(layout); 
    window->show(); 
    setCentralWidget(window); 
} 

單擊按鈕Change content將刪除選項卡中的舊內容(藍色QLabel),並通過創建一個新的內容(紅色QLabel)替換它:

enter image description here

+0

謝謝你的回答。好吧,我創建了另一個類,像這樣Mywidget:公共QScrollArea和我在我的主窗口選項卡上添加了一個對象,我添加了這樣的內容:Mywidget * mw = new Mywidget; UI-> tabwidget-> addtab(WM, 「進myWidget」); - 我在Mywidget中添加了一個公共函數; void changelayout(int); // 1爲佈局1,2爲佈局2。並且我使用了一個tab部件的功能,但它不工作。 UI-> tabwidget->窗口小部件(2) - > changelayout(2); //錯誤請幫助我。 –

+0

代碼示例已包含在上一個答案中。問候。 – gpalex

+0

非常感謝 –

相關問題