我有一个QTabWidget这样的:
但我想扩展选项卡以“填充”整个小部件宽度,如下所示:
我怎样才能做到这一点?
我正在使用Qt 5.3.2和Qt Creator 3.2.1
更新:
我尝试使用该setExpanding功能:
ui->myTabWidget->tabBar()->setExpanding(true);
Run Code Online (Sandbox Code Playgroud)
但它没有用。
只需将扩展模式和文档模式设置为 true 即可。
ui->tabWidget->tabBar()->setDocumentMode(true);
ui->tabWidget->tabBar()->setExpanding(true);
Run Code Online (Sandbox Code Playgroud)
对我有用:)
我发现它QTabBar有一种setExpanding方法,它似乎完全符合您的要求,但我尝试过(在 Windows 上),但它不起作用。这是代码:
ui->tabWidget->tabBar()->setExpanding (true);
Run Code Online (Sandbox Code Playgroud)
然后我找到了下面的帖子:
https://forum.qt.io/topic/47404/qtabbar-will-not-expand-its-tabs
我发现上述帖子中提供的答案值得商榷。他说,无论扩展属性是否设置为 true,它都尊重操作系统风格,它是一个功能,而不是一个错误,并且您必须子类化QTabBar以获得所需的行为。如果我编写代码来做特定的事情,我觉得我的指令应该覆盖操作系统风格。如果我只想要操作系统风格,我会忽略那个特殊的代码。无论我多么不同意实施,这似乎是我们坚持的。
因此,如果拥有这种外观对您很重要,那么您将需要子类化QTabBar,覆盖tabSizeHint- 我怀疑这需要进行一些实验 - 并使用QTabWidget::setTabBar您自己的来替换默认值。根据文档,您必须在添加任何选项卡之前执行此操作,因此如果您想在 Qt Designer 中创建选项卡小部件,则此机制不可行。(另一个支持setExpanding作为对操作系统风格的替代而不是实现方式的论点。)
正如mostefa在这里回答的那样,我可以使用styleSheet为选项卡设置固定宽度。
我正在根据宽度计算宽度QTabWidget。
为了正确获取QTabWidget宽度,我需要在showEvent函数中获取它:
void LogListForm::showEvent(QShowEvent *ev)
{
/*
* Divide by 2 because we have 2 tabs.
* I need to decrease 24 pixels to fill the width correctly.
*/
int tabWidth = (ui->myTabWidget->width()/2)-24;
/*
* Then, I set this tabWidth to the styleSheet.
* Note: I need to set the previously styleSheet to not lose it
*/
ui->myTabWidget->setStyleSheet( ui->myTabWidget->styleSheet() +
"QTabBar::tab {"
"width: " + QString::number(tabWidth) + "px; }" );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4291 次 |
| 最近记录: |