Pregunta

Estoy usando Qt y tengo una configuración QTabWidget en el Editor de Qt Designer, se puede ver en la imagen 1.

imagen 1

Como se puede ver después de TAB4 hay un espacio vacío todo el camino hasta el borde derecho, de alguna manera tengo que llenar ese espacio con un color, como en la imagen 2 (lo mejor sería ser capaz de establecer una el desvanecimiento del color). U otra solución sería que las lengüetas de flotar al cubrir toda la pantalla.

imagen 2

Yo uso la siguiente hoja de estilo en este momento:

QTabWidget::tab-bar {

 }

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

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

¿Hay una manera de fijar el color de fondo de la QTabBar usando hojas de estilo Qt? O puedo obtener las fichas flotando hacia el borde usando hojas de estilo Qt?

EDIT: He estado tratando la solución que Caleb Huitt - cjhuitt sugiere a continuación. Me gusta mucho la idea de hacer las pestañas se expanden, pero no puede conseguir que funcione.

En Qt Designer I Editor haga clic derecho en mi QTabWidget -> "Promover a ..." y elegir la opción "nombre de la clase base": QTabWidget "Nombre de la clase Promovido": ExpandableTabWidget y luego haga clic en Agregar y luego promover.

En el método init del widget que tiene mi QTabWidget puse

ui.tabWidget->SetTabsExpanding(true);

Todo está construyendo bien, pero el QTabbar no se expande.

¿Estoy haciendo algo mal?

Gracias!

¿Fue útil?

Solución

Tanto la expansión de las lengüetas y la coloración del fondo puede realizarse utilizando hojas de estilo.

Para la ampliación de las pestañas, una hoja de estilo se puede aplicar a las lengüetas que establece su anchura a una fracción de la anchura total de la QTabWidget. Desde tendrá que ser actualizado al cambiar el tamaño de la hoja de estilo, se aplica utilizando un filtro de eventos. Véase el primer código de ejemplo a continuación.

A pesar de que el fondo de la barra de pestañas se puede ajustar, la barra de pestañas no llena todo el espacio por encima del panel de la pestaña. Es el contenedor (o widget padre) que se muestra a través. Para controlar el color de esa área, poner la QTabWidget en un QWidget y fijar la hoja de estilo en el envase. Véase el segundo código de ejemplo a continuación.

Expansión de fichas:

#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();
}

Fondo lado pestañas:

#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();
}

Otros consejos

A mi entender, tiene dos opciones, dependiendo de lo que quiere hacer.

Para llenar el fondo con los colores:

Tome ventaja de la transparencia de esa porción del widget pestaña.

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

Esto hace que el bg widget de toda la naranja, pero como la mayoría del widget pestaña dibujará sobre el widget bg, sólo verá la naranja en el widget pestaña no dibuja.

Para hacer que las pestañas se expanden:

pensé que esto sería más fácil de lo que es, pero que básicamente tienen que subclase QTabWidget con el fin de obtener acceso al widget de barra de pestañas que utiliza.

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

A continuación, ya sea que tenga que hacer su clase ExpandableTabWidget en un plugin y utilizarlo en el diseñador, o podría promover su widget de pestaña a ser de tipo ExpandableTabWidget y establecer el valor de la expansión en el código. Si usted elige hacer la promoción, no verá los resultados que desea en el diseñador, pero tendrá cuando se ejecute el programa.

En qt 4.5 hay una nueva propiedad que controla la prestación widget de pestaña, llamada documentMode . Sólo tiene que llamar tabWidget->setDocumentMode(true) y establecer el color de fondo de la QTabBar usando las hojas de estilo.

A partir de la documentación de Qt:

  

Esta propiedad se mantiene o no el widget pestaña se representa en un modo adecuado para las páginas del documento. Este es el mismo que el modo documento en Mac OS X.

     

Cuando esta propiedad se establece el marco de widget de ficha no se rinde. Este modo es útil para mostrar las páginas de tipo documento en la página cubre la mayor parte del área de widget pestaña.

Yo tenía el mismo problema hace algún tiempo. Lo logré haciendo "grandes" borde superior, y moviendo la barra de pestañas con un margen

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top