8

我想在我的 Qt 应用程序中设置标签的样式,如下所示:

在此处输入图像描述

我使用了以下样式表:

QTabBar{background-color: #fff; border-top: 0px;}
QTabBar::tab {
    border-image: url(:/New_UI/tab_inactive.png) 7 17 7 2;
    margin-left: 2px;
    border-right: 17px;
    border-top: 5px;
    border-bottom: 5px;
    font: 400 9.2pt "Segoe UI";
    color: #ccc;
    padding: 0px 13px 0px 5px;
    max-height: 26px;
 }

QTabBar::tab:selected, QTabBar::tab:hover {
    border-image: url(:/New_UI/tab_active.png) 6 17 6 2;
}

QTabBar::close-button {
    image: url(:/New_UI/tab_close.png);
    subcontrol-origin: padding;
    subcontrol-position: right; 
    width: 13px;
    height: 13px;

}

结果如下(关闭按钮的位置不是我想要的):

在此处输入图像描述

我做错了什么&我怎么能得到我想要的结果?

4

5 回答 5

7

编辑:我知道这篇文章很旧,但我希望它可以帮助别人。

经过几次测试,我认为有一种方法可以做到这一点,但它不使用Qt style sheets

  1. 将您的子类QTabWidget化以完全访问受保护的功能
  2. 创建您自己的QWidgetQPushButton作为您的关闭按钮
  3. 使用样式表属性管理按钮的位置(margin-right例如)
  4. 将按钮添加到选项卡tabBar()->setTabButton(index, QTabBar::RightSide, closeButton);

我用于测试的代码:

MyTab::MyTab(QWidget *parent) : QTabWidget(parent)
{
/// Create your button
QPushButton *close = new QPushButton(this);

// Add a tab
addTab(new QWidget(), QIcon(), "Tab 1");
setStyleSheet("QTabBar::tab { width : 150px;}");

// Size and move your button
close->setStyleSheet("max-height: 14px; max-width: 15px; margin-right: 50px;");

// Add your button to the tab
tabBar()->setTabButton(0, QTabBar::RightSide, close);
}

最后,在 MainWindow 中,我将自己的 TabWidget 添加到布局中:

ui->layout->addWidget(new MyTab(this));

结果 :

在此处输入图像描述

但是现在您必须通过连接按钮手动处理关闭操作并获取removeTab(index)呼叫索引。

于 2013-01-19T10:02:41.147 回答
0

我正在做和你一样的事情,这是我的样式表:

QTabBar::close-button{
    image:url(:tabclose.png); 
    margin-right:4px;
}

不要使用“width”和“height”属性,这两个在这里不起作用,在子控件上设置“image:url()”会隐式设置子控件的宽度和高度(除非图像在 SVG )。

使用“margin-right”属性控制标签右边缘的距离;

于 2013-03-15T09:18:14.100 回答
0

添加自定义按钮是一个很好的答案。但是如果您使用边距来决定关闭按钮的位置,则关闭按钮的鼠标区域会异常,所以我在一个小部件中添加了一个 SpacerItem 和按钮,最后将此小部件添加到 TabWidget。

void TabBarCloseable::tabInserted(int index)
{
    QWidget *widget = new QWidget(this);
    QHBoxLayout *layout = new QHBoxLayout(this);
    widget->setLayout(layout);

    QToolButton *closeBtn = new QToolButton(this);
    layout->addWidget(closeBtn);
    layout->insertSpacing(1, 15);
    closeBtn->setStyleSheet("max-height: 16px; max-width: 16px;");

    this->setTabButton(index, QTabBar::RightSide, widget);

    QTabBar::tabInserted(index);
}
于 2016-10-27T05:41:51.527 回答
0

你有错误的填充

在此处输入图像描述

最佳

QTabBar::tab {
    min-width: 25ex;
    padding: 10px 50px 10px 10px;
}

按钮

QTabBar::tab {
    min-width: 25ex;
    padding: 10px 0px 10px 10px;
}
于 2020-01-31T06:34:06.847 回答
-1

这是一个纯样式表解决方案,无需手动创建按钮:

QTabBar::close-button {
    image: url(:/tab-close.png);
    padding-left: -13px;
}

如果您检查 Qt 源代码,图像绘制代码仅使用填充值,而不使用边距值。

于 2016-04-14T16:13:04.057 回答