如何在 Qt 中动态更改选项卡大小?

How to dynamically change tabs sizes in Qt?

我是一名学生,正在研究我的第一个 Qt 程序,我需要一些帮助。我正在开发乐器模拟器。我有一个 mainwindow 和 2 个 classes:DrumsWindow 和 KeysWindow 模拟鼓和键并且具有不同的大小(鼓是 798x532,键是 953x306)。我在主 window 中创建了一个 tabWidget 并将我的 DrumsWindow 和 KeysWindow 插入其中:

ui->tabWidget->insertTab(0, &dw, "Drums");
ui->tabWidget->insertTab(1, &kw, "Synth");

if (ui->tabWidget->currentIndex() == 0){
    this->resize(798, 532);
    ui->tabWidget->resize(798, 532);
}

if (ui->tabWidget->currentIndex() == 1){
    this->resize(953, 306);
    ui->tabWidget->resize(953, 306);
}

此代码来自 MainWindow 构造函数。它有效,主 window 中有两个选项卡显示鼓和键。但是,那些“if”语句只会使第一个打开的选项卡具有适当的大小。当我单击 Synth 选项卡时,window 大小保持不变(虽然我需要更改它)。所以,这就是我为解决问题所做的。首先,我在 MainWindow class:

中创建了新插槽
void MainWindow::drumsTabClicked()
{
    ui->tabWidget->setCurrentIndex(0);
    this->resize(798, 532);
    ui->tabWidget->resize(798, 532);
}
void MainWindow::keysTabClicked()
{
    ui->tabWidget->setCurrentIndex(1);
    this->resize(953, 306);
    ui->tabWidget->resize(953, 306);
}

然后,我将它们连接到信号:

connect(ui->tabWidget, SIGNAL(tabBarClicked(0)), this, SLOT(drumsTabClicked()));
connect(ui->tabWidget, SIGNAL(tabBarClicked(1)), this, SLOT(keysTabClicked()));

但是,它仍然不起作用。您能否解释一下如何在用户单击选项卡时调整主要 window 的大小?

你应该这样连接:

connect(ui->tabWidget, SIGNAL(tabBarClicked(int)), this, SLOT(onTabBarClicked(int)));

然后在这个槽中做你的东西,并用 if:

将它们分开
void MainWindow::tabBarClicked(int index)
{
    if(!index)
    {
        this->resize(798, 532);
        ui->tabWidget->resize(798, 532);
    }
    else
    {
        this->resize(953, 306);
        ui->tabWidget->resize(953, 306);
    }
}

您也可以通过右键单击 UI 表单选项卡栏并 select 转到插槽 tabBarClicked.

来自动创建此连接

谢谢你们,你们帮了我很多。这是我所做的。

mainwindow.h: 添加了一个插槽

private slots:
    void onTabBarClicked(int);

mainwindow.cpp:添加了slot

的实现
void MainWindow::onTabBarClicked(int index){
    if (index == 0){
        this->resize(798, 532);
        ui->tabWidget->resize(798, 532);
    }
    if (index == 1){
        this->resize(953, 306);
        ui->tabWidget->resize(953, 306);
    }
}

并使用 Qt5 语法连接插槽和信号:

connect(ui->tabWidget, &QTabWidget::tabBarClicked, this, &MainWindow::onTabBarClicked);

所以,现在可以了!