2

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

现在,在currentChanged(int)信号上,我调用一个重命名先前和当前选项卡(调用setTabText())的方法。

不幸的是,这会重新绘制整个QTabBar选项卡,因此如果我当前的选项卡在重新绘制后位于滚动选项卡栏的中间某处,那么它是该栏上最后绘制的选项卡,以便我看到更多前面的选项卡。有没有办法将当前标签保持在同一位置?

4

1 回答 1

0

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

请测试此代码以检查它是否适合您并查看与您的应用程序的差异。

主文件

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

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

主窗口.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

主窗口.cpp

#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));
    }    
}
于 2015-08-25T22:23:08.570 回答