我有一个 QTabWidget 有几个固定大小的选项卡。我想将选项卡小部件放置在布局中以使其与主窗口一起拉伸,但这会导致滚动条在我收缩时出现在选项卡的右侧,或者在我拉伸时出现在选项卡右侧的空白区域出来。我希望标签自动填充 QTabWidget 的整个长度。
问问题
3818 次
2 回答
3
选项卡小部件非常严格地确保内部的 QTabBar 以最小尺寸创建。然而,一切都没有丢失。
因为我们确实可以访问 QTabBar 和其中的选项卡,所以我们可以做一些事情。我找到了以下答案,它提出了一个简单的解决方法。
基本上使用样式表,我们根据选项卡小部件的当前宽度设置选项卡的宽度。然后,诀窍是确保如果选项卡小部件的宽度发生变化,我们会重新进行此计算。
建议的方法是使用 EventFilter。基本上只需要以下类:
// 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)
{
// The width of each tab is the width of the tab widget / # of tabs.
target->setStyleSheet(QString("QTabBar::tab { width: %1px; } ")
.arg(target->size().width()/target->count()));
}
return false;
}
};
然后对于您特定的 QTabWidget,只需安装事件处理程序:
ui.tabWidget->installEventFilter(new ResizeFilter(ui.tabWidget));
快!
尽管我会在答案中添加一件事。因为无论显示文本如何,选项卡都具有相同的大小,因此您可能需要确保在 QTabWidget 上设置“elideMode”属性以处理选项卡中没有足够空间显示整个标题的情况。这将截断文本以适应并添加“...”。
于 2013-06-28T20:24:42.323 回答
0
您需要在选项卡小部件上将 QSizePolicy 设置为 MinimumExpanding,应定义最小尺寸以防止其缩小,同时设置 setWidgetResizable(true)。还为子小部件设置正确的 QSizePolicy 并为选项卡小部件定义布局(HBox、VBox、Grid)。
于 2013-06-28T13:53:06.153 回答