在我的应用程序中,我有一个QTabBar
小部件,如果有很多标签,该小部件将使用滚动按钮。
现在,在currentChanged(int)
信号上,我调用一个重命名上一个和当前选项卡的方法(称为setTabText()
)。
不幸的是,这会重新绘制整个QTabBar
,因此,如果我当前的选项卡在重新绘制后位于滚动选项卡栏的中间,则它是该栏上最后绘制的选项卡,因此我可以看到更多先前的选项卡。有什么办法可以将当前选项卡保持在同一位置?
最佳答案
我不确定我是否正确理解了该问题,但是使用以下代码,我的应用程序运行良好。
请测试此代码,以检查它是否对您有用,并查看与您的应用程序的区别。
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));
}
}
关于c++ - QTabBar保留标签位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32211741/