C++ Qt5.9 自定义继承自QToolBox的类 实现tab的尺寸可改变
时间: 2023-06-12 13:02:33 浏览: 132
要实现自定义继承自QToolBox的类并且使tab的尺寸可改变,可以按照以下步骤进行:
1. 创建一个新的类,继承自QToolBox,比如叫做ResizableToolBox。
2. 在ResizableToolBox类的头文件中添加一个成员变量,用来存储当前tab的大小,比如:
QSize m_tabSize;
3. 重载ResizableToolBox类的resizeEvent()函数,当尺寸改变时,同时改变当前tab的大小,代码如下:
void ResizableToolBox::resizeEvent(QResizeEvent *event)
{
QToolBox::resizeEvent(event);
m_tabSize = QSize(event->size().width(), currentWidget()->size().height());
}
4. 重载ResizableToolBox类的eventFilter()函数,当鼠标在tab上按下并移动时,改变当前tab的大小,代码如下:
bool ResizableToolBox::eventFilter(QObject *obj, QEvent *event)
{
if (obj == this->currentWidget() && event->type() == QEvent::MouseMove && m_tabSize.isValid()) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
int newWidth = mouseEvent->pos().x() + 2;
int newHeight = m_tabSize.height();
currentWidget()->setFixedSize(newWidth, newHeight);
return true;
}
return QToolBox::eventFilter(obj, event);
}
5. 在ResizableToolBox类的构造函数中设置当前widget的固定大小为初始大小,代码如下:
ResizableToolBox::ResizableToolBox(QWidget *parent) : QToolBox(parent)
{
currentWidget()->setFixedSize(currentWidget()->size());
}
6. 在使用ResizableToolBox类时,需要设置每个widget的最小大小,否则会出现widget大小不一致的问题,代码如下:
ResizableToolBox *resizableToolBox = new ResizableToolBox();
for (int i = 0; i < resizableToolBox->count(); i++) {
QWidget *widget = resizableToolBox->widget(i);
widget->setMinimumSize(widget->size());
}
这样就可以实现自定义继承自QToolBox的类并且使tab的尺寸可改变了。
阅读全文