gpt4 book ai didi

c++ - 动态扩展 QTabBar

转载 作者:行者123 更新时间:2023-11-28 05:38:27 26 4
gpt4 key购买 nike

我正在通过 QLineEdit 动态插入制表符,效果很好。为了填满屏幕的整个宽度 (800px),我使用自己的 eventFilter 扩展选项卡:

tabs.h

class ResizeFilter : public QObject
{
QTabBar *target_tabs;

public:
ResizeFilter(QTabBar *target_tabs) : QObject(target_tabs), target_tabs(target_tabs) {}

bool eventFilter(QObject *object, QEvent *event)
{
if (object == target_tabs) {
if (event->type() == QEvent::Resize)
{
// The width of each tab is the width of the tabbar / # of tabs.
target_tabs).arg(target_tabs->size().width()/target_tabs->count()));
}
}
return false;
}
};

class tabs : public QWidget
{
Q_OBJECT

private:
QTabBar *cells;
};

tabs.cpp

void tabs::changeTabs(int value)
{
tabs->installEventFilter(new ResizeFilter(tabs));

if (tabs->count() < value)
tabs->insertTab(tabs->count(), QIcon(QString("")), QString::number(value));
}

运行应用程序后,一个选项卡始终可见并正确展开。如前所述,最大宽度设置为 800 像素。添加新选项卡工作正常,但调整大小事件弄乱了尺寸标注。假设我要添加第二个标签,它在第一个标签旁边显示 800px,而不是在 800px 内缩放两个标签(每个标签 400/400 px)。

看起来像这样: wrong insertion

当它实际上应该是这样的: how it's supposed to be

我在这里做错了什么?

最佳答案

您是在选项卡上设置大小,而不是在 QTabBar 上。所以很明显,新标签将采用设置的宽度,直到发生调整大小。

您可以只继承QTabBar 并实现resizeEventtabInserted,这也使您的eventFilter 变得多余。

示例代码:

class CustomTabBar : public QTabBar
{
public:
CustomTabBar(QWidget *parent = Q_NULLPTR)
: QTabBar(parent)
{
}

protected:
void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE
{
/*resize handler*/
}

void tabInserted(int index) Q_DECL_OVERRIDE
{
/*new tab handler*/
}

void tabRemoved(int index) Q_DECL_OVERRIDE
{
/*tab removed handler*/
}
};

关于c++ - 动态扩展 QTabBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37697666/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com