QSplitter语言 - 改变QTabWidget的大小
QSplitter - changing the size of QTabWidget
我目前有一个QTabWidget和一些布局。现在我想让QtabWidget的所有选项卡占据QtabWidget的宽度,所以我有这样的东西。下面的方法展开Qtabwidget中的两个选项卡,使它们与Qtabwidget
的大小相同void Contacts::AdjustTabs( int pos, int index )
{
std::string orig_sheet = ui.tabWidget->styleSheet().toStdString();
QString new_style = QString("QTabBar::tab { width: %1px; } ").arg((ui.tabWidget->size().width() /ui.tabWidget->count()));
std::string t = new_style.toStdString();
orig_sheet = orig_sheet + t;
ui.tabWidget->setStyleSheet(orig_sheet.c_str());
}
上面的方法可以正常工作。现在,当QTabwidget与其他一些布局一起设置在Qsplitter布局中时,问题就开始了。在启动构建时,上面的方法似乎不起作用,例如,我有这样的东西
Someclass::SomeConstructor()
{
ui.setupUi(this);
.........
QObject::connect(ui.splitter,SIGNAL(splitterMoved(int,int)),this,SLOT(AdjustTabs(int,int)));
AdjustTabs(0,0);
}
现在当表单出现时,选项卡的水平大小保持不变(它们不展开-这是错误的)。然而,当我移动分配器的选项卡扩展,一切都很好。我的问题是如何使我的选项卡在表单加载期间展开?为什么他们不扩张?
我认为每当发生resize事件时,尝试显式调整选项卡的大小并不是最好的方法。如果设置得当,由于QSplitter和QTabWidget的内部布局管理器的默认行为,应该自然地进行适当的大小调整。这里有一个非常简单的例子来说明我的意思;请注意,在这个程序中没有代码显式地处理任何东西的大小调整,但是所有的选项卡都正确地调整大小,因为拆分器被移动和/或窗口被调整大小:
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QSplitter>
#include <QTabWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow mw;
QSplitter * splitter = new QSplitter(&mw);
QTabWidget * tab = new QTabWidget;
tab->addTab(new QPushButton("Content of tab #1"), "tab #1");
tab->addTab(new QPushButton("Content of tab #2"), "tab #2");
tab->addTab(new QPushButton("Content of tab #3"), "tab #3");
splitter->addWidget(tab);
splitter->addWidget(new QPushButton("Some other content"));
mw.setCentralWidget(splitter);
mw.show();
return a.exec();
}
那么问题就来了——为什么你的标签页不能自动调整大小呢?也许你有他们的sizePolicy属性设置为Fixed,而不是Preferred或ignore ?
相关文章:
- 变量没有改变?通过向量的函数调用
- Qt和C++:将QLineEdit添加到QTabWidget中
- 通过选项卡的文本设置QTabWidget顺序
- 如何改变c++应用程序的视觉效果
- C++在不同线程中改变向量
- 如何访问和改变存储在矢量C++中的对象
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 为什么 c++ 动态数组的大小没有改变?
- 为什么提升图库的 read_graphviz() 函数会改变节点的索引
- 在向量内更改变量的值不会改变其在向量外的值
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 改变或缩放两个正态分布以具有特定的相关系数
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 为什么我的函数接受"std::string"进行排序不会改变它?
- MFC:你能在CDateTimeCtrl中改变自旋的加速度吗?
- 为什么切换 for 循环的顺序会显著改变执行时间?
- 使用可变参数模板改变模板参数
- C++中物体改变识别的设计模式?
- QSplitter语言 - 改变QTabWidget的大小