在Qt中创建序列选项卡
Creating sequenced tabs in Qt
程序具有主窗口,菜单栏,菜单项(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)
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- Win32编译器选项和内存分配
- 可组合的lambda/std::函数与std::可选
- 具有N列和N行的矩阵,列必须具有N-1、N-2等值
- 设置复选框选项C++
- 什么是提升等价于标准::可选空选项
- 如何将所选行的第一列值绑定到变量并在 QT 的 SQL 命令中使用它?
- 选项卡到qtableView中的下一个可见列
- 如何禁用控制+QTableView的快捷方式并防止全选选项
- 获得快速的k对独立散列函数的选项是什么
- 选项卡控件:如何防止所选内容发生更改
- 高效读取带有可选列的 CSV 文件
- Qt有自己的boost::可选选项吗
- sqlite:如何获取所选列的列id
- 仅为QFileSystemModel的第一列(驱动器、文件夹、文件)选择选项
- 查找 wx菜单的选定单选项
- 如何在boost程序选项中拥有可选选项值
- 检查发送邮件的“发送选项”中是否勾选了“签名/加密”
- 在C中选择三个选项(多选)
- 可以有多列复选框的Windows ListView控件(或类似的控件)