更改QTabWidget小部件的内容,只知道选项卡索引

时间:2015-10-16 16:49:47

标签: c++ qt widget qt5 tabwidget

如何只知道标签索引,如何更改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
}

1 个答案:

答案 0 :(得分: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