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

标签 c++ qt widget qt5 tabwidget

如何在只知道标签索引的情况下更改 QTabWidget 标签内的 QWidget

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
}

最佳答案

很难说哪种解决方案最适合您的问题,因为您没有解释太多。

第一种方法是将每个选项卡的内容包装在容器 QWidget 中:当您想要更改一个选项卡的内容时,您只需更改容器 QWidget 的内容。

另一种方法是删除包含旧内容的选项卡并创建包含新内容的新选项卡。


编辑: 这是我上面提到的第一种方法的快速实现:

主窗口.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

主窗口.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

关于c++ - 更改 QTabWidget 的小部件的内容,只知道选项卡索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175653/

相关文章:

c++ - 为什么 C++ 在语法上不区分按引用传递和按值传递?

c++ - QVector 和 std::vector 的大小方法

c++ - Qt iOS 问题 - 使用 QAudioRecorder 更改音频输出设备

widget - iOS 8 Today小部件对齐问题

c++ - 跨平台 Windows/OS X 开发,具有大量现有代码库

c++ - 是否有用于向文件路径添加尾部斜杠的习惯用法?

c++ - 如何更改Qt中进度条的默认样式颜色

javascript - 从一个网络应用程序到另一个网站提供复杂内容(考虑整个网页树)的最佳可重用解决方案是什么?

flutter - Flutter:使用Switch语句未更改颜色