如何在 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);
所以,现在可以了!
我是一名学生,正在研究我的第一个 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);
所以,现在可以了!