Я динамически вставляю и удаляю вкладки через QSpinBox, который отлично работает. Чтобы заполнить всю ширину экрана (800 пикселей), мне нужно расширить вкладки, используя мой собственный фильтр событий:
mainwindow.h
namespace Ui {
class MainWindow;
}
class CustomTabBar : public QTabBar
{
public:
CustomTabBar(QWidget *parent = Q_NULLPTR)
: QTabBar(parent)
{
}
void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE
{
/* Resize handler */
if (e->type() == QEvent::Resize) {
// The width of each tab is the width of the tab widget / # of tabs.
resize(size().width()/count(), size().height());
}
}
void tabInserted(int index) Q_DECL_OVERRIDE
{
/* New tab handler */
insertTab(count(), QIcon(QString("")), QString::number(index));
}
void tabRemoved(int index) Q_DECL_OVERRIDE
{
/* Tab removed handler */
removeTab(count() - index);
}
};
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
CustomTabBar *tabs;
};
Соответствующий код моего главного окна выглядит следующим образом:
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
cells = new CustomTabBar(this);
cells->tabInserted(1);
// cells->installEventFilter(resizeEvent());
}
void MainWindow::changeCells(int value) // Called when QSpinBox is changed
{
if (cells->count() < value) {
cells->tabInserted(1);
}
else if (cells->count() > value) {
cells->tabRemoved(1);
}
}
Как уже было сказано, максимальная ширина установлена на 800 пикселей. Желаемое поведение:
- Одна вкладка: ширина 800 пикселей.
- Две вкладки: ширина 400 пикселей каждая
- ...
Но везде, где я использую одно из этих пользовательских событий, возникает ошибка сегментации.
Что я здесь делаю неправильно?
cells->tabInserted(1);
. Если я комментирую это, это ошибка в классе customTabBar mainwindow.h. Видимо, я не могу найти, что или где я что-то упускаю.. :) - person MichaW.   schedule 09.06.2016setExpanding
мне совсем не помог, так как он только расширяет вкладки (вроде) на половину экрана. - person MichaW.   schedule 09.06.2016