在Qt中创建顺序选项卡

问题描述 投票:0回答:2

程序具有主窗口,菜单栏,菜单项(Qt中的QAction),选项卡小部件,文本编辑。当我按下菜单项(新标签页)时,我尝试在标签中接收序列编号。

当我按下新标签时,必须出现标签1,标签2,标签3,标签4等。

建议的近似代码在这里:

MainWindow::MainWindow(QWidget* parent):QMainWindow(parent)
{
    QMenuBar* menuBar = new QMenuBar(this);
    setMenuBar(menuBar);

    QMenu* fileMenu = new QMenu("&File", this);
    menuBar->addMenu(fileMenu);

    QAction* newTabAction = new QAction("&New Tab", this);
    fileMenu->addAction(newTabAction);
    connect(newTabAction, SIGNAL(triggered()), this, SLOT(newTabActionHandler()));

    QTabWidget* tabWidget = new QTabWidget(this);
    QList<QWidget*> widgetList;
    widgetList.append(new QWidget(this));
    tabWidget->addTab(widgetList[0], "Tab 0");
    tabWidget->setMovable(true);
    tabWidget->setTabsClosable(true);
    QList<QTextEdit*> textEditList;
    textEditList.append(new QTextEdit(this));
    QVBoxLayout* vBoxLayout = new QVBoxLayout();
    widgetList[0]->setLayout(vBoxLayout);
    vBoxLayout->addWidget(textEditList[0]);
    setCentralWidget(tabWidget);
}

void MainWindow::newTabActionHandler()
{
    widgetList.append(new QWidget(this));
    tabWidget->addTab(widgetList[widgetList.size()-1], ????);
    textEditList.append(new QTextEdit(this));
    QVBoxLayout* vBoxLayout = new QVBoxLayout();
    widgetList[widgetList.size()-1]->setLayout(vBoxLayout);
    vBoxLayout->addWidget(textEditList[textEditList.size()-1]);
}

请将正确的代码放入问题符号所在的行(在newTabActionHandler()方法体中)。

tabWidget->addTab(widgetList[widgetList.size()-1], ????);

谢谢!

c++ qt qt5 qwidget qtabwidget
2个回答
0
投票

您必须订购代码,在这种情况下,您只需要使用列表的大小。但我可以自由地更正你的代码,例如widgetList和textEditList是局部变量,所以你不能从插槽中访问,所以它们是类的成员是合适的。

另一个建议是订购代码,代码的可读性越强,因此您可以创建小部件和textedit,并在不使用容器的情况下创建链接。

mainwindow.cpp

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextEdit>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void newTabActionHandler();

private:
    QList<QWidget*> widgetList;
    QList<QTextEdit*> textEditList;
    QTabWidget* tabWidget;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include <QMenu>
#include <QMenuBar>
#include <QTextEdit>
#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    QMenuBar *menuBar = new QMenuBar(this);
    setMenuBar(menuBar);

    QMenu* fileMenu = new QMenu("&File", this);
    menuBar->addMenu(fileMenu);

    QAction *newTabAction = new QAction("&New Tab", this);
    fileMenu->addAction(newTabAction);
    connect(newTabAction, &QAction::triggered, this, &MainWindow::newTabActionHandler);

    tabWidget = new QTabWidget(this);
    tabWidget->setMovable(true);
    tabWidget->setTabsClosable(true);
    newTabActionHandler();

    setCentralWidget(tabWidget);
}

void MainWindow::newTabActionHandler()
{
    QWidget *widget = new QWidget;
    widgetList << widget;
    tabWidget->addTab(widget, QString("Tab %1").arg(widgetList.size()-1));

    QTextEdit *textEdit =  new QTextEdit;
    textEditList << textEdit;
    QVBoxLayout* vBoxLayout = new QVBoxLayout(widget);
    vBoxLayout->addWidget(textEdit);
}


MainWindow::~MainWindow()
{

}

您可以在以下link中找到完整的示例


-1
投票

替换????通过QString("Tab %1").arg(widgetList.size()-1)

© www.soinside.com 2019 - 2024. All rights reserved.