我有一个QTabWidget
,它的标签在West上,然后我试图向它添加一个角落小部件,但它没有出现。如果我将选项卡位置设置为North或South,则会显示角落小部件,但不会显示在侧面。
这是一个MRE:
QWidget *w = new QWidget();
QTabWidget *t = new QTabWidget(w);
w->setMinimumSize(800,600);
t->addTab(new QWidget(),"Tab");
t->addTab(new QWidget(),"Tab");
t->addTab(new QWidget(),"Tab");
t->addTab(new QWidget(),"Tab");
t->setTabPosition(QTabWidget::TabPosition::East);
t->setGeometry(100,100,400,400);
QPushButton *button = new QPushButton("Button");
//for debugging purposes
button->setObjectName("ss");
//for debugging purposes
t->setStyleSheet("background: red");
button->setStyleSheet("background: blue;");
//for debugging purposes
t->setCornerWidget(button1,Qt::TopLeftCorner);
//t->setCornerWidget(button1,Qt::TopRightCorner);
//t->setCornerWidget(button1,Qt::BottomLeftCorner);
//t->setCornerWidget(button1,Qt::BottomRightCorner);
w->show();
//for debugging purposes
//qDebug()<<button->geometry();
//button->setGeometry(0,0,50,50);
//for debugging purposes
button->connect(button,&QPushButton::clicked,[](){qDebug()<<"corner widget click?";});
我试着使用所有4个角,和右角没有效果,但左导致一个空白的标签前的空间,这里是它的外观,空白的空间是在右上角:
我尝试设置按钮的样式表,使其在隐藏时也能显示出来,但没有任何结果。
我检查了按钮的几何形状,它得到了QRect(0,0 0x0)
,这是在使用show()
之后。所以我试图设置它的几何形状,但结果什么也没有(但几何形状得到正确更新),按钮仍然没有显示。
我还试图通过将其clicked()
信号连接到qDebug()
来检查按钮的位置,我点击了整个小部件,没有得到任何输出。
QTabWidget::setCornerWidget:
注意:角部件是为南北标签位置设计的;已知其它取向不能正常工作。
我从中得到的,这不是完全不可能得到它的工作。
有没有办法在侧面得到一个QTabWidget
角部件?
1条答案
按热度按时间yhived7q1#
在Qt文档(qt 6)中,QTabWidget::setCornerWidget:说:
注意:角部件是为南北标签位置设计的;已知其它取向不能正常工作。
这意味着他们做的工作,但混乱和不方便使用。
下面是一种在侧面使用
QTabWidget
角部件的方法:正如问题中已经提到的,当标签位置为
West
或East
时,设置一个角落小部件会导致标签前出现一个小间隙,而没有任何东西出现在那里。但是如果你设置了
QTabWidget
的角落小部件最小尺寸,它就会出现,这解决了一个问题,但又引起了另一个问题,因为现在我需要自己计算那个尺寸,或者为我的角落小部件腾出空间。这是一个MRE,我用来尝试并计算如何获得空角大小:
下面是它的外观,我使用了自定义图标:
如果你需要更多的空间来放置角落小部件,你需要移动标签栏,因为角落小部件会覆盖它,你可以使用样式表来完成。Qt样式表示例:自定义QTabWidget和QTabBar。
下面是一个stylesheet的例子:
以下是它的外观,这是我的MRE的唯一添加和更改:
**建议:**QTabWidget::paintEvent可能是更好的解决方案。