-1

我一直在尝试在 aQToolBar内部添加一个QTabWidget以实现如下图所示的效果,这样每次我添加一个新的时,QTabWidget我都会在其中添加一个相关的QToolBar

标签

一切似乎都工作正常,我创建了一个QAction将它链接到的,QTabWidget并且根据这篇文章似乎可以做到这一点,但问题是当我编译时没有显示如下所示:

选项卡2

以下是我到目前为止所做的:

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

主窗口.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,这是我发现的最重要的参考资料,因为用户似乎正在这样做,但没有参考文档或没有代码示例来理解/研究。

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

4

2 回答 2

2

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

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

在此处输入图像描述

于 2020-05-18T03:34:33.990 回答
1

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

尝试在你的主窗口构造函数中做这样的事情。

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

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

即使其他答案似乎有效,这实际上是执行您所要求的正确方法。

于 2020-05-18T03:48:01.930 回答