C++ 如何使用QPushButton在现有QTabWidget上添加“新选项卡”
我正在尝试使用QPushButton在现有QTabWidget上添加一个新选项卡,如下所示: 我的问题是,当我按下按钮时,什么也没有发生,也没有添加新的选项卡。 我设置了所有正确的连接和插槽,但是有东西阻止我将其添加到QTabWidget。当我按下按钮时,基本上什么也没发生 下面是最小可验证示例: 主窗口 mainwindow.cpp 我试图用多种方法解决这个问题,并研究了可能的原因。我遇到了一些参考资料,例如,但没有一个能完全解决这个问题 我确信的属性是正确的,但是,尽管终端中没有错误,但触发按钮的回调没有执行该操作 我错过了什么?感谢您为解决此问题指明了正确的方向。将按钮的单击信号连接到tabwidget的addTab函数/插槽,或连接到调用正确目标对象上的addTab的中间函数/lambda 例如:C++ 如何使用QPushButton在现有QTabWidget上添加“新选项卡”,c++,qt,qt5,qtablewidget,qpushbutton,C++,Qt,Qt5,Qtablewidget,Qpushbutton,我正在尝试使用QPushButton在现有QTabWidget上添加一个新选项卡,如下所示: 我的问题是,当我按下按钮时,什么也没有发生,也没有添加新的选项卡。 我设置了所有正确的连接和插槽,但是有东西阻止我将其添加到QTabWidget。当我按下按钮时,基本上什么也没发生 下面是最小可验证示例: 主窗口 mainwindow.cpp 我试图用多种方法解决这个问题,并研究了可能的原因。我遇到了一些参考资料,例如,但没有一个能完全解决这个问题 我确信的属性是正确的,但是,尽管终端中没有错误,但触发
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("+")); });