如何在 QTabWidget 中添加 QToolBar
How to add a QToolBar inside a QTabWidget
我一直在尝试在 QTabWidget
中添加一个 QToolBar
以实现如下图所示的效果,这样每次我添加一个新的 QTabWidget
我也有一个相关的QToolBar
在里面。
一切似乎都正常,我创建了一个 QAction
到 link 它到 QTabWidget
并且根据 this post 似乎可以这样做但是问题是当我编译时没有任何显示,如下所示:
以下是我目前所做的:
mainwindow.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;
};
mainwindow.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,这是我发现的最重要的参考资料,因为用户似乎正在这样做,但没有参考文档或没有代码示例到 understand/study through.
感谢您指出解决此问题的正确方向。
你可以简单地做这样的事情,而且它确实有效。
QToolBar *toolbar=new QToolBar("toolbar",ui->tab);
toolbar->addAction("action1");
toolbar->addAction("action2");
enter image description here
我没有看到您尝试将工具栏添加到 TabWidget 的位置...
您必须定义布局,将您的工具栏添加到该布局,最后将布局设置为您的 tabWidget。
尝试在您的主窗口构造函数中执行类似的操作。
QHBoxLayout* tabWidgetLayout = new QHBoxLayout;
tabWidgetLayout->addWidget( your toolbar);
tabwidget->setLayout(tabWidgetLayout);
另外不要忘记包含 QHBoxLayout 的 header。
即使其他答案似乎可行,这实际上也是完成您要求的正确方法。
我一直在尝试在 QTabWidget
中添加一个 QToolBar
以实现如下图所示的效果,这样每次我添加一个新的 QTabWidget
我也有一个相关的QToolBar
在里面。
一切似乎都正常,我创建了一个 QAction
到 link 它到 QTabWidget
并且根据 this post 似乎可以这样做但是问题是当我编译时没有任何显示,如下所示:
以下是我目前所做的:
mainwindow.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;
};
mainwindow.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,这是我发现的最重要的参考资料,因为用户似乎正在这样做,但没有参考文档或没有代码示例到 understand/study through.
感谢您指出解决此问题的正确方向。
你可以简单地做这样的事情,而且它确实有效。
QToolBar *toolbar=new QToolBar("toolbar",ui->tab);
toolbar->addAction("action1");
toolbar->addAction("action2");
enter image description here
我没有看到您尝试将工具栏添加到 TabWidget 的位置... 您必须定义布局,将您的工具栏添加到该布局,最后将布局设置为您的 tabWidget。
尝试在您的主窗口构造函数中执行类似的操作。
QHBoxLayout* tabWidgetLayout = new QHBoxLayout;
tabWidgetLayout->addWidget( your toolbar);
tabwidget->setLayout(tabWidgetLayout);
另外不要忘记包含 QHBoxLayout 的 header。
即使其他答案似乎可行,这实际上也是完成您要求的正确方法。