Frage

Ich bin mit Qt und ich habe eine QTabWidget Setup im Qt Designer-Editor können Sie es sehen Sie in Abbildung 1.

Wie Sie nach Tab4 sehen können, gibt es einen leeren Raum der ganzen Weg bis zum rechten Rande, in someway muß ich mit einer Farbe, den Raum zu füllen, wie in Bild 2 (das Beste, was zu Satz eines in der Lage sein würde Fading Farbe). Oder eine andere Lösung wäre, dass die Registerkarten, um den gesamten Bildschirm zu decken schweben aus.

Ich benutze das folgende Stylesheet jetzt:

QTabWidget::tab-bar {

 }

 QTabBar::tab {
  background: gray;
  color: white;
  padding: 10px;
 }

 QTabBar::tab:selected {
  background: lightgray;
 }

Gibt es eine Möglichkeit, die Hintergrundfarbe des QTabBar mit Qt Sheets zu setzen? Oder kann ich die Laschen an den Rand Sheets mit Qt Floating-out?

EDIT: Ich habe versucht, die Lösung, dass Caleb Huitt - cjhuitt unten vorgeschlagen. Ich mag die Idee, die Tabs erweitern, aber kann sie nicht arbeiten.

Qt Designer Editor Ich klicke direkt auf meine QTabWidget -> "fördern ..." und wählen Sie "Basisklasse name": QTabWidget "Promoted Klassenname": ExpandableTabWidget und klicken Sie dann auf I add und dann fördern.

In der init-Methode des Widgets, das meine ich QTabWidget Satz

hält
ui.tabWidget->SetTabsExpanding(true);

Alles baut in Ordnung, aber die QTabbar sich nicht ausdehnt.

Bin ich etwas falsch zu machen?

Danke!

War es hilfreich?

Lösung

Die beiden Laschen und Färben der Hintergrund erweitert erreicht werden können Stylesheets verwenden.

tabs expandierende kann ein Stylesheet auf das Laschen angelegt werden, die zu einem Bruchteil der Gesamtbreite der QTabWidget ihrer Breite festlegt. Da das Stylesheet auf Resize aktualisiert werden müssen, wird es mit einem Ereignisfilter angewendet. Siehe ersten Beispielcode unten.

Auch wenn der Hintergrund der Tab-Leiste kann so eingestellt wird, wird die Tab-Leiste nicht den gesamten Raum über dem Registerbereich füllen. Es ist der Behälter (oder Mutter widget), die durch zeigt. Um die Färbung dieses Bereichs zu steuern, setzen den QTabWidget in einem QWidget und setzt das Stylesheet auf den Behälter. Siehe zweiten Beispiel-Code unten.

Der Ausbau Registerkarten:

#include <QtGui>

// Sets the style sheet of the QTabWidget to expand the tabs.
static void expandingTabsStyleSheet(QTabWidget *tw)
{
    tw->setStyleSheet(QString("QTabBar::tab { width: %1px; } ")
                      .arg(tw->size().width()/tw->count()));
}

// On resize events, reapply the expanding tabs style sheet
class ResizeFilter : public QObject
{
    QTabWidget *target;
public:
    ResizeFilter(QTabWidget *target) : QObject(target), target(target) {}

    bool eventFilter(QObject *object, QEvent *event)
    {
        if (event->type() == QEvent::Resize)
            expandingTabsStyleSheet(target);
        return false;
    }
};


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

  QTabWidget *tw = new QTabWidget;
  tw->installEventFilter(new ResizeFilter(tw));
  tw->addTab(new QWidget, "Tab1");
  tw->addTab(new QWidget, "Tab2");
  tw->addTab(new QWidget, "Tab3");

  tw->show();

  return app.exec();
}

Hintergrund neben Registerkarten:

#include <QtGui>

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

  QWidget *container = new QWidget;
  container->setStyleSheet("background: qlineargradient( x1: 0, y1: 0, x2: 1, y2
: 0, stop: 0 black, stop: 1 blue);");

  QHBoxLayout *layout = new QHBoxLayout(container);
  layout->setContentsMargins(0, 0, 0, 0);

  QTabWidget *tw = new QTabWidget(container);
  layout->addWidget(tw);
  tw->setStyleSheet(
      "QTabBar::tab { background: gray; color: white; padding: 10px; } "
      "QTabBar::tab:selected { background: lightgray; } "
      "QTabWidget::pane { border: 0; } "
      "QWidget { background: lightgray; } ");
  tw->addTab(new QWidget, "Tab1");
  tw->addTab(new QWidget, "Tab2");
  tw->addTab(new QWidget, "Tab3");

  container->show();

  return app.exec();
}

Andere Tipps

Wie ich es sehe, haben Sie zwei Möglichkeiten, je nachdem, was Sie tun möchten.

den Hintergrund mit Farbe füllen:

Nutzen Sie die Transparenz des Teils des Lappens-Widget.

QWidget *bg = new QWidget( parent );
bg->setAutoFillBackground( true );
QPalette bg_palette = bg->palette();
bg_palette.setColor( QPalette::Window, QColor( "orange" ) );
bg->setPalette( bg_palette );

QHBoxLayout layout = new QHBoxLayout();
layout->setMargin( 0, 0, 0, 0 );
layout->setSpacing( 0 );
bg->setLayout( layout );

QTabWidget *tab_widget = new QTabWidget();
// set up tab_widget however you want...
layout->addWidget( tab_widget );

Das macht die bg-Widget alle orange, aber da die meisten der Tab-Widget den bg-Widget zieht über wird, werden Sie nur die orangefarbene sehen, wo die Registerkarte Widget ziehen nicht.

Damit die Tabs erweitern:

dachte ich, das wäre einfacher, als es ist, aber Sie im Grunde eine Unterklasse QTabWidget müssen, um Zugriff auf die Tab-Leiste zu bekommen Widget verwendet es.

class ExpandableTabWidget : public QTabWidget
{
    Q_OBJECT;
    Q_PROPERTY( bool expanding_tabs READ Expanding WRITE SetExpanding );

public:
    ExpandableTabWidget( QWidget *parent = NULL ) : QTabWidget( parent )
    {
    }

    bool Expanding() const
    {
        return tabBar()->expanding();
    }

    void SetTabsExpanding( bool expanding = true )
    {
        tabBar()->setExpanding( expanding );
    }
};

Sie würden dann entweder benötigen ExpandableTabWidget Klasse in ein Plugin zu machen und es in Designer verwenden, oder Sie können Ihr Tab Widget fördern Typ ExpandableTabWidget zu sein und den wachsenden Wert im Code festgelegt. Wenn Sie die Förderung tun, werden Sie nicht die Ergebnisse sehen Sie in Designer wollen, aber Sie werden, wenn Sie führen Sie Ihr Programm.

Auf qt 4.5 gibt es eine neue Eigenschaft, die die Registerkarte Widget Rendering steuern, die so genannte documentMode . Nur tabWidget->setDocumentMode(true) nennen und die Hintergrundfarbe des QTabBar mit dem Stylesheets festgelegt.

Von Qt Dokumentation:

  

Diese Eigenschaft enthält, ob die Registerkarte Widget in einem Modus, geeignet für Dokumentseiten gemacht wird. Dies ist die gleiche wie Dokument-Modus unter Mac OS X.

     

Wenn diese Eigenschaft gesetzt ist der Tab-Widget Rahmen nicht wiedergegeben wird. Dieser Modus ist für die Ansicht Dokument-Typ-Seiten, auf denen die Seitenabdeckungen die meisten der Registerkarte Widget Bereich nützlich.

hatte ich gleiches Problem vor einiger Zeit. Ich erreichte es durch „große“ Top-Grenze, und Bewegen Tab-Leiste mit Rande

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top