QTabBar для сохранения позиции табуляции

В моем приложении у меня есть QTabBar виджет, который использует кнопки прокрутки, если есть много вкладок.

Сейчас на currentChanged(int) сигнал я вызываю метод, который переименовывает предыдущую и текущую вкладку (вызовы setTabText()).

К сожалению это перекрашивает целое QTabBar и в результате, если моя текущая вкладка была где-то посередине прокручиваемой панели вкладок после перекраски, это последняя окрашенная вкладка на панели, так что я вижу больше предыдущих вкладок. Есть ли способ сохранить текущую вкладку в той же позиции?

2

Решение

Я не уверен, правильно ли я понял проблему, но с помощью следующего кода мое приложение работает хорошо.

Пожалуйста, протестируйте этот код, чтобы проверить, работает ли он для вас, и посмотрите на различия в вашем приложении.

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));
}
}
0

Другие решения


По вопросам рекламы [email protected]