在Qt中创建顺序选项卡

时间:2018-03-04 14:20:58

标签: c++ qt qt5 qwidget qtabwidget

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

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

谢谢!

2 个答案:

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

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