Qt:造型QTabWidget

Mar*_*tin 11 qt qtstylesheets qtabwidget

我正在使用Qt,我在Qt Designer编辑器中设置了QTabWidget,你可以在图1中看到它.

图1 http://i40.tinypic.com/1109ba1.jpg

正如你在Tab4之后看到的那样,一直有一个空的空间一直到右边缘,在某种程度上我需要用一种颜色填充那个空间,如图2所示(最好的是能够设置褪色的颜色) .或者另一种解决方案是标签浮出来覆盖整个屏幕.

图2 http://i41.tinypic.com/zwmijr.jpg

我现在使用以下样式表:

QTabWidget::tab-bar {

 }

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

 QTabBar::tab:selected {
  background: lightgray;
 }
Run Code Online (Sandbox Code Playgroud)

有没有办法使用Qt样式表设置QTabBar的背景颜色?或者我可以使用Qt样式表将标签浮动到边缘?

编辑:我一直在尝试Caleb Huitt - cjhuitt在下面提出的解决方案.我真的很喜欢让标签扩展但无法使其正常工作的想法.

在Qt Designer Editor中,我右键单击我的QTabWidget - >"Promote To ..."并选择"Base class name":QTabWidget"Promoted class name":ExpandableTabWidget然后我单击add然后单击Promote.

在我设置的包含我的QTabWidget的小部件的init方法中

ui.tabWidget->SetTabsExpanding(true);
Run Code Online (Sandbox Code Playgroud)

一切都很好,但QTabbar没有扩展.

难道我做错了什么?

谢谢!

bay*_*ith 17

扩展标签和着色背景都可以使用样式表来完成.

对于展开选项卡,可以将样式表应用于选项卡,这些选项卡将其宽度设置为总宽度的一小部分QTabWidget.由于样式表需要在调整大小时更新,因此使用事件过滤器应用它.请参阅下面的第一个示例代

虽然可以设置选项卡栏的背景,但选项卡栏不会填充选项卡窗格上方的整个空间.它是显示的容器(或父窗口小部件).要控制该区域的着色,请将QTabWidgeta QWidget和样式表放在容器中.见下面的第二个示例代码.

扩展标签:

#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();
}
Run Code Online (Sandbox Code Playgroud)

标签旁边的背景:

#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();
}
Run Code Online (Sandbox Code Playgroud)