在Qt中创建序列选项卡

Creating sequenced tabs in Qt

本文关键字:列选 选项 创建 Qt      更新时间:2023-10-16

程序具有主窗口,菜单栏,菜单项(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], ????);

谢谢!

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

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

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

主窗口.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()
{
}

您可以在以下链接中找到完整示例

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