C++ 如何使用QPushButton在现有QTabWidget上添加“新选项卡”

C++ 如何使用QPushButton在现有QTabWidget上添加“新选项卡”,c++,qt,qt5,qtablewidget,qpushbutton,C++,Qt,Qt5,Qtablewidget,Qpushbutton,我正在尝试使用QPushButton在现有QTabWidget上添加一个新选项卡,如下所示: 我的问题是,当我按下按钮时,什么也没有发生,也没有添加新的选项卡。 我设置了所有正确的连接和插槽,但是有东西阻止我将其添加到QTabWidget。当我按下按钮时,基本上什么也没发生 下面是最小可验证示例: 主窗口 mainwindow.cpp 我试图用多种方法解决这个问题,并研究了可能的原因。我遇到了一些参考资料,例如,但没有一个能完全解决这个问题 我确信的属性是正确的,但是,尽管终端中没有错误,但触发

我正在尝试使用QPushButton在现有QTabWidget上添加一个新选项卡,如下所示:

我的问题是,当我按下按钮时,什么也没有发生,也没有添加新的选项卡。 我设置了所有正确的连接和插槽,但是有东西阻止我将其添加到QTabWidget。当我按下按钮时,基本上什么也没发生

下面是最小可验证示例:

主窗口

mainwindow.cpp

我试图用多种方法解决这个问题,并研究了可能的原因。我遇到了一些参考资料,例如,但没有一个能完全解决这个问题

我确信的属性是正确的,但是,尽管终端中没有错误,但触发按钮的回调没有执行该操作

我错过了什么?感谢您为解决此问题指明了正确的方向。

将按钮的单击信号连接到tabwidget的addTab函数/插槽,或连接到调用正确目标对象上的addTab的中间函数/lambda

例如:

connect(ui->addTabBtn, &QPushButton::clicked, this, [&] { ui->tabWidget->addTab(new QLabel("+"), QString("+")); });

或者类似的问题。

您好,谢谢您阅读以下问题:。请您将您的答案与一系列代码整合在一起好吗?如果这就是您所指的connectui->tabWidget,&QTabWidget::addTab,则单击此,&MainWindow::on\u addTabBtn;它不工作,它说没有匹配的成员函数来调用connectOoooo好的,我知道你的意思。谢谢你更新答案。它工作正常:谢谢你的时间!
#include <QLabel>
#include <QTabBar>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->tabWidget->clear();
    ui->tabWidget->addTab(new QLabel("+"), QString("+"));
    connect(ui->tabWidget, &QTabWidget::currentChanged, this, &MainWindow::on_addTabBtn_clicked);
    newTab();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::newTab()
{
    int position = ui->tabWidget->count() - 1;
    ui->tabWidget->insertTab(position, new QLabel("Insert New Tab"), QString("New Tab"));
    ui->tabWidget->setCurrentIndex(position);
    auto tabBar = ui->tabWidget->tabBar();
    tabBar->scroll(tabBar->width(), 0);
}


void MainWindow::on_addTabBtn_clicked()
{
    int index = 0;
    if(index == this->ui->tabWidget->count() - 1) {
        newTab();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>428</width>
    <height>279</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
     <widget class="QTabWidget" name="tabWidget">
      <widget class="QWidget" name="tab">
       <attribute name="title">
        <string>Tab 1</string>
       </attribute>
      </widget>
      <widget class="QWidget" name="tab_2">
       <attribute name="title">
        <string>Tab 2</string>
       </attribute>
      </widget>
     </widget>
    </item>
    <item row="1" column="0">
     <widget class="QPushButton" name="addTabBtn">
      <property name="text">
       <string>Add Tab</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>428</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>
connect(ui->addTabBtn, &QPushButton::clicked, this, [&] { ui->tabWidget->addTab(new QLabel("+"), QString("+")); });