在 Qt 中创建顺序选项卡

Creating sequenced tabs in Qt

一个程序有主window、菜单栏、菜单项(QAction in Qt)、选项卡小部件,文本编辑。当我按下菜单项(新标签)时,我尝试在标签中接收顺序编号。

当我按新标签然后标签1,标签2,tab 3tab 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], ????);

谢谢!

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

您必须对代码进行排序,在这种情况下您只需要使用列表的大小。但我已经给予了更正代码的自由,例如 widgetList 和 textEditList 是局部变量,因此您无法从插槽访问,因此它们是 class.

的成员是合适的

另一个建议是对你的代码进行排序,你的代码越可读,这样你就可以创建小部件和文本编辑器,并在不使用容器的情况下创建链接。

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