我正在通过QLineEdit动态地插入制表符,这很好。为了填充屏幕的整个宽度(800 my ),我使用自己的eventFilter扩展选项卡:
tub.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像素。添加一个新的选项卡很好,但是调整大小事件会扰乱尺寸。假设我正在添加第二个选项卡,它在第一个选项卡旁边显示800 px,而不是在800 px(每个400 /400 px)中缩放两个选项卡。
它看起来像这样:错误插入
实际上应该是这样的:它应该是怎样的
我在这里做错什么了?
发布于 2016-06-08 09:45:53
您在选项卡上设置大小,而不是在QTabBar上设置大小。因此,很明显,新的选项卡将接受设置的宽度,直到调整大小。
您可以继承QTabBar并实现resizeEvent和tabInserted,这也使得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*/
}
};https://stackoverflow.com/questions/37697666
复制相似问题