基于C++的QT开发问题-01:QTabWidget子标签点击红色叉叉后无法关闭
资料参考:
问题描述:
如上图所示:使用Qt创建一个MainWindow,将实例化的QTabWidget利用方法setCentralWidget(ui->tabWidget);设置为主部件,使用ui->tabWidget->setTabsClosable(true);设置为可关闭候点击图中红色无法对子标签进行关闭。
this->setCentralWidget(ui->tabWidget);
ui->tabWidget->setTabsClosable(true);
问题产生的原因:
点击红色x后tabwidget只是发送了一个tabCloseRequested信号,并没有产生任何动作(见参考资料01)。通过查阅官网QTabwidget资料(见下图)可知,QTabWidget并没有与关闭子标签相关的槽函数只提供了一个关闭子标签的成员函数:closeTab(int index) 。
解决方法:
1.在窗体类MainWindow类中创建一个槽函数closeTab(int index)
class QWMainWindow : public QMainWindow
{
Q_OBJECT
public:
QWMainWindow(QWidget *parent = nullptr);
~QWMainWindow();
public slots:
void closeTab(int index);
private:
Ui::QWMainWindow *ui;
};
2.在定义的槽函数closeTab(int index)中调用QTabWidget的成员函数removeTab()
void QWMainWindow::closeTab(int index)
{
ui->tabWidget->removeTab(index);
}
3.窗体初始化时将信号tabCloseRequested与closeTab(int index)连接起来
QWMainWindow::QWMainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::QWMainWindow)
{
ui->setupUi(this);
this->setCentralWidget(ui->tabWidget);
ui->tabWidget->setTabsClosable(true);
connect(ui->tabWidget,SIGNAL(tabCloseRequested(int)),this,SLOT(closeTab(int)));
}
再次运行程序发现已经可以关闭子标签页