QSplitter — изменение размера QTabWidget

В настоящее время у меня есть QTabWidget и немного макета.
Теперь я хочу, чтобы все вкладки моего QtabWidget занимали ширину QtabWidget, поэтому у меня есть что-то вроде этого. Следующий метод расширяет две вкладки в моем Qtabwidget, чтобы они имели тот же размер, что и QtabWidget

void Contacts::AdjustTabs( int pos, int index )
{
std::string orig_sheet = ui.tabWidget->styleSheet().toStdString();
QString new_style = QString("QTabBar::tab { width: %1px; } ").arg((ui.tabWidget->size().width()  /ui.tabWidget->count()));
std::string t = new_style.toStdString();
orig_sheet = orig_sheet + t;
ui.tabWidget->setStyleSheet(orig_sheet.c_str());
}

Вышеуказанный метод работает отлично. Теперь проблема начинается, когда QTabwidget установлен в макете Qsplitter вместе с каким-то другим макетом. При запуске запуска вышеописанный метод не работает, например, у меня есть что-то вроде этого

Someclass::SomeConstructor()
{
ui.setupUi(this);
.........
QObject::connect(ui.splitter,SIGNAL(splitterMoved(int,int)),this,SLOT(AdjustTabs(int,int)));
AdjustTabs(0,0);
}

Теперь при появлении формы горизонтальные размеры вкладок остаются неизменными (они не расширяются — что неправильно). Однако, когда я перемещаю разделитель, вкладки расширяются, и все в порядке. У меня вопрос, как я могу расширить свои вкладки во время загрузки формы? Почему они не расширяются?

0

Решение

Я думаю, что попытка явно настроить размеры вкладок, когда происходит событие изменения размера, не лучший подход. Если все настроено правильно, соответствующие корректировки размера должны происходить естественным образом из-за поведения по умолчанию внутренних менеджеров компоновки QSplitter и QTabWidget. Вот очень простой пример того, что я имею в виду; обратите внимание, что в этой программе нет кода, который бы явно обрабатывал изменение размеров чего-либо, и, тем не менее, все вкладки изменяют размер правильно по мере перемещения разделителя и / или изменения размера окна:

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QSplitter>
#include <QTabWidget>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QMainWindow mw;

QSplitter * splitter = new QSplitter(&mw);

QTabWidget * tab = new QTabWidget;
tab->addTab(new QPushButton("Content of tab #1"), "tab #1");
tab->addTab(new QPushButton("Content of tab #2"), "tab #2");
tab->addTab(new QPushButton("Content of tab #3"), "tab #3");
splitter->addWidget(tab);

splitter->addWidget(new QPushButton("Some other content"));

mw.setCentralWidget(splitter);
mw.show();

return a.exec();
}

Таким образом, возникает вопрос — почему ваши вкладки не меняются автоматически? Возможно, там у вас есть свойство sizePolicy, установленное на Fixed, а не Preferred или Ignored?

0

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


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