2015-08-25 101 views
2

在我的應用程序中,我有一個QTabBar小部件,如果有許多選項卡,它使用滾動按鈕。QTabBar保留標籤位置

現在,在currentChanged(int)信號上,我調用了一個重命名前一個和當前選項卡的方法(調用setTabText())。

不幸的是,這重新整個QTabBar,結果如果我的當前選項卡重新繪製後,它是滾動選項卡欄中間的某個地方,它是欄上最後一個繪製選項卡,以便我看到更多前面的選項卡。有沒有辦法將當前標籤保持在同一位置?

回答

0

我不確定如果我正確理解問題,但使用以下代碼,我的應用程序運行良好。

請測試此代碼以檢查它是否適用於您,並查看與您的應用程序的區別。

的main.cpp

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

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

mainwindow.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 

mainwindow.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)); 
    }  
}