C++ 保留制表符位置的QTabBar

C++ 保留制表符位置的QTabBar,c++,qt,qtabwidget,qtabbar,C++,Qt,Qtabwidget,Qtabbar,在我的应用程序中,我有一个qtabar小部件,如果有很多选项卡,它会使用滚动按钮 现在,在currentChanged(int)signal上,我调用了一个方法,该方法重命名了先前和当前选项卡(调用setTabText()) 遗憾的是,这会重写整个代码> QTabbar < /Cord>,因此,如果我当前的tab在重新绘制后的滚动条中的某个位置,它是最后一个在条形上绘制的标签,这样我就可以看到更多前面的标签。有没有办法将当前选项卡保持在相同的位置?我不确定是否正确理解了这个问题,但是使用以下代码

在我的应用程序中,我有一个
qtabar
小部件,如果有很多选项卡,它会使用滚动按钮

现在,在
currentChanged(int)
signal上,我调用了一个方法,该方法重命名了先前和当前选项卡(调用
setTabText()


遗憾的是,这会重写整个代码> QTabbar < /Cord>,因此,如果我当前的tab在重新绘制后的滚动条中的某个位置,它是最后一个在条形上绘制的标签,这样我就可以看到更多前面的标签。有没有办法将当前选项卡保持在相同的位置?

我不确定是否正确理解了这个问题,但是使用以下代码,我的应用程序运行良好

请测试此代码以检查其是否适用于您,并查看与您的应用程序的差异

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow mainWindow;
    mainWindow.show();
    return app.exec();
}
#include "mainwindow.h"

MainWindow::MainWindow()
{
    tabBar = new QTabBar();

    for (int i = 1; i < 10; ++i)
    {
         tabBar->addTab(QString("###") + QString::number(i) + QString("###"));
    }

    QObject::connect(tabBar, &QTabBar::currentChanged,
                     this, &MainWindow::onCurrentChanged);

    setCentralWidget(tabBar);
}

MainWindow::~MainWindow()
{
}

void MainWindow::onCurrentChanged(int index)
{
    int currentIndex = tabBar->currentIndex();
    qDebug("currentChanged(%d), currentIndex() = %d", index, currentIndex);

    for (int i = index; i >= 0; --i)
    {
        tabBar->setTabText(i, QString::number(i+1));
    }    
}
#包括“mainwindow.h”
#包括
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
主窗口主窗口;
mainWindow.show();
返回app.exec();
}
main window.h

#ifndef _MAINWINDOW_H
#define _MAINWINDOW_H

#include <QMainWindow>
#include <QTabBar>
#include <QDebug>

class MainWindow: public QMainWindow {
    Q_OBJECT
    QTabBar *tabBar;

public:
    MainWindow();
    ~MainWindow();

private slots:
    void onCurrentChanged(int index);
};

#endif
\ifndef\u主窗口
#定义主窗口
#包括
#包括
#包括
类主窗口:公共QMainWindow{
Q_对象
QTabBar*tabBar;
公众:
主窗口();
~main窗口();
专用插槽:
当前更改无效(整数索引);
};
#恩迪夫
main window.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow mainWindow;
    mainWindow.show();
    return app.exec();
}
#include "mainwindow.h"

MainWindow::MainWindow()
{
    tabBar = new QTabBar();

    for (int i = 1; i < 10; ++i)
    {
         tabBar->addTab(QString("###") + QString::number(i) + QString("###"));
    }

    QObject::connect(tabBar, &QTabBar::currentChanged,
                     this, &MainWindow::onCurrentChanged);

    setCentralWidget(tabBar);
}

MainWindow::~MainWindow()
{
}

void MainWindow::onCurrentChanged(int index)
{
    int currentIndex = tabBar->currentIndex();
    qDebug("currentChanged(%d), currentIndex() = %d", index, currentIndex);

    for (int i = index; i >= 0; --i)
    {
        tabBar->setTabText(i, QString::number(i+1));
    }    
}
#包括“mainwindow.h”
MainWindow::MainWindow()
{
tabBar=新的QTabBar();
对于(int i=1;i<10;++i)
{
tabBar->addTab(QString(“####“)+QString::number(i)+QString(“####”);
}
QObject::connect(选项卡和QTabar::currentChanged,
此(主窗口::onCurrentChanged)(&MainWindow::onCurrentChanged);
setCentralWidget(tabBar);
}
MainWindow::~MainWindow()
{
}
void主窗口::onCurrentChanged(int索引)
{
int currentIndex=tabBar->currentIndex();
qDebug(“currentChanged(%d),currentIndex()=%d”,index,currentIndex);
对于(int i=索引;i>=0;--i)
{
tabBar->setTabText(i,QString::number(i+1));
}    
}