Ich bin Einfügen und Entfernen von Tabs dynamisch über QSpinBox, die gut funktioniert. So füllen die gesamte Breite des Bildschirms (800px) Ich brauche die Registerkarten mit meinem eigenen event zu erweitern:Inherit benutzerdefinierte TabBar und Implementierung von resizeEvent
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;
};
Der entsprechende Code meiner Hauptfenster sieht wie folgt aus:
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);
}
}
Wie gesagt die maximale Breite ist, auf 800 Pixel eingestellt. Das gewünschte Verhalten wäre:
- Ein tab: 800px Breite
- zwei Registerkarten: 400px Breite jeder
- ...
Aber es ist egal wo ich bin Speicherzugriffsfehler eines dieser Brauch mit Veranstaltungen.
Was mache ich hier falsch?
Haben Sie versucht, den Segfault zu debuggen? –
Nun ja .. in meinem obigen Beispiel-Code ist es an der ersten 'cells-> tabInserted (1); Wenn ich es auskommentiere, ist es in der Klasse mainwindow.h customTabBar fehlerhaft. Anscheinend bin ich nicht in der Lage zu finden, was oder wo ich etwas vermisse .. :) –
Sie scheinen Größe innerhalb der resizeEvent überschreiben aufrufen, die a) Größe der Tab-Leiste selbst, anstatt einzelne Tabs und b) führen zu unendliche Rekursion und wahrscheinlich ein Segfault. –