如何在 QTabWidget 中添加 QToolBar

Posted

技术标签:

【中文标题】如何在 QTabWidget 中添加 QToolBar【英文标题】:How to add a QToolBar inside a QTabWidget 【发布时间】:2020-05-17 20:45:15 【问题描述】:

我一直在尝试在QTabWidget 中添加一个QToolBar,以实现如下图所示的效果,这样每次我添加一个新的QTabWidget 我还有一个相关的QToolBar 在里面。

一切似乎都运行良好,我创建了一个 QAction 将其链接到 QTabWidget 并且根据 this post 似乎可以做到这一点,但 问题 是当我编译什么都没有显示如下:

以下是我目前所做的:

ma​​inwindow.h

class MainWindow : public QMainWindow

    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void onChangeTab(int index);
    void newTab();
    void closeTab(const int &index);
private slots:
    void on_addTabBtn_clicked();
    void on_tabWidget_tabCloseRequested(int index);
private:
    Ui::MainWindow *ui;
    QAction *addTab1;
    QToolBar *mToolBar1;
    QAction *addIconToolBar1;
;

ma​​inwindow.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)

    ui->setupUi(this);
    ui->tabWidget->clear();
    ui->tabWidget->setTabsClosable(true);
    ui->tabWidget->addTab(new QLabel("Add"), QString("Add"));
    ui->toolBar->setContextMenuPolicy(Qt::ActionsContextMenu);

    mToolBar1 = new QToolBar;
    addIconToolBar1 = new QAction;
    addIconToolBar1->setIcon(QIcon("qrc:/cardio.png"));
    ui->toolBar->addWidget(mToolBar1);
    ui->toolBar->addAction(addIconToolBar1);

    connect(ui->addTabBtn, &QPushButton::clicked, this, [&]  ui->tabWidget->addTab(new QLabel("Add"), QString("Add")); );
    connect(ui->tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));



MainWindow::~MainWindow()

    delete ui;


void MainWindow::on_addTabBtn_clicked()

    int index = 0;
    if(index == this->ui->tabWidget->count() - 1) 
        newTab();
    


void MainWindow::on_tabWidget_tabCloseRequested(int index)

    ui->tabWidget->removeTab(index);

我尝试通过多种方式解决问题,并研究了可能的原因。我遇到了几个参考资料,例如this one,这是我发现的最重要的参考资料,因为用户似乎正在这样做,但没有参考文档或没有代码示例来理解/研究。

感谢您指出解决此问题的正确方向。

【问题讨论】:

您必须在标签中添加一个小部件,然后在小部件内添加一个布局并将您的工具栏放在小部件中 @thibsc ,感谢您停下来阅读这个问题。谢谢你的建议。我会继续这样做并回复你。 :) 【参考方案1】:

你可以简单地做这样的事情,它确实有效。

QToolBar *toolbar=new QToolBar("toolbar",ui->tab);
toolbar->addAction("action1");
toolbar->addAction("action2");

enter image description here

【讨论】:

我猜你想要的工具栏不需要拖动。 :) 正确! :) 我不需要将工具栏拖到任何地方,但需要修复。你的例子正是我想要的。谢谢你的时间:)【参考方案2】:

我没有看到您尝试将工具栏添加到 TabWidget 的位置... 您必须定义布局,将工具栏添加到该布局,最后将布局设置为您的 tabWidget。

尝试在您的主窗口构造函数中执行类似的操作。

QHBoxLayout* tabWidgetLayout = new QHBoxLayout;
tabWidgetLayout->addWidget( your toolbar);
tabwidget->setLayout(tabWidgetLayout);

也不要忘记包含 QHBoxLayout 的标题。

即使其他答案似乎可行,这实际上是满足您要求的正确方法。

【讨论】:

以上是关于如何在 QTabWidget 中添加 QToolBar的主要内容,如果未能解决你的问题,请参考以下文章

当添加子选项卡时,如何使 qtabwidget 实例自动调整大小?

如何在 QTabwidget 中保存文件?

更改 QTabWidget 的背景颜色

如何向 QTabWidget 添加新选项卡

如何从 QTabWidget 获取小部件?

Qt中QTabWidget动态添加页面的问题