Изменение содержимого виджета 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

Решение

Трудно сказать, какое решение лучше всего подойдет для вашей проблемы, так как вы не можете многое объяснить.

Первый подход было бы обернуть содержимое каждой вкладки внутри контейнера 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):

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]