如何根据QComboBox值修改window内容
How to modify window contents based on QComboBox value
我有一个 Qt window,其中包含一个 QComboBox 和一些 QLabel 和 QLineEdit。根据用户选择的 QComboBox 值,我想在 window 仍然打开时动态更改 QLabels 和 QLineEdits。
例如,如果QComboBox有一个国家列表,用户选择了法国,我想把所有的QLabels和QLineEdits都改成法语;然后,用户需要在单击底部的 Save/Close 按钮之前用法语填写 QLineEdits。
这可以在 Qt 中完成吗?
如果您只想进行语言翻译,在 Qt 中还有其他方法可以使用词典来翻译 Ui 文本。看看https://doc.qt.io/qt-5/qtlinguist-hellotr-example.html
但听起来您的问题不仅仅与语言有关,因此您可以使用 QComboBox 信号 currentTextChanged 和一个将接收当前值并根据该文本更新标签的插槽。或者,如果您不想使用一堆 ifs,您可以使用信号 currentIndexChanged 并使用开关。
在我的 ui 文件中,我有 (4) 个对象:一个 comboBox 和 label1 到 3。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->comboBox->addItem("Selected Option 1");
ui->comboBox->addItem("Selected Option 2");
ui->comboBox->addItem("Selected Option 3");
connect(ui->comboBox, &QComboBox::currentTextChanged,
this, &MainWindow::setLabelText);
}
void MainWindow::setLabelText(const QString comboText)
{
if(comboText == "Selected Option 1")
{
ui->label1->setText("Text when option 1 is selected");
ui->label2->setText("Text when option 1 is selected");
ui->label3->setText("Text when option 1 is selected");
}
else if(comboText == "Selected Option 2")
{
ui->label1->setText("Text when option 2 is selected");
ui->label2->setText("Text when option 2 is selected");
ui->label3->setText("Text when option 2 is selected");
}
else if(comboText == "Selected Option 3")
{
ui->label1->setText("Text when option 3 is selected");
ui->label2->setText("Text when option 3 is selected");
ui->label3->setText("Text when option 3 is selected");
}
}
在您的页眉中确保将 setLabeText 定义为 slot。
private slots:
void setLabelText(const QString comboText);
我有一个 Qt window,其中包含一个 QComboBox 和一些 QLabel 和 QLineEdit。根据用户选择的 QComboBox 值,我想在 window 仍然打开时动态更改 QLabels 和 QLineEdits。
例如,如果QComboBox有一个国家列表,用户选择了法国,我想把所有的QLabels和QLineEdits都改成法语;然后,用户需要在单击底部的 Save/Close 按钮之前用法语填写 QLineEdits。
这可以在 Qt 中完成吗?
如果您只想进行语言翻译,在 Qt 中还有其他方法可以使用词典来翻译 Ui 文本。看看https://doc.qt.io/qt-5/qtlinguist-hellotr-example.html
但听起来您的问题不仅仅与语言有关,因此您可以使用 QComboBox 信号 currentTextChanged 和一个将接收当前值并根据该文本更新标签的插槽。或者,如果您不想使用一堆 ifs,您可以使用信号 currentIndexChanged 并使用开关。
在我的 ui 文件中,我有 (4) 个对象:一个 comboBox 和 label1 到 3。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->comboBox->addItem("Selected Option 1");
ui->comboBox->addItem("Selected Option 2");
ui->comboBox->addItem("Selected Option 3");
connect(ui->comboBox, &QComboBox::currentTextChanged,
this, &MainWindow::setLabelText);
}
void MainWindow::setLabelText(const QString comboText)
{
if(comboText == "Selected Option 1")
{
ui->label1->setText("Text when option 1 is selected");
ui->label2->setText("Text when option 1 is selected");
ui->label3->setText("Text when option 1 is selected");
}
else if(comboText == "Selected Option 2")
{
ui->label1->setText("Text when option 2 is selected");
ui->label2->setText("Text when option 2 is selected");
ui->label3->setText("Text when option 2 is selected");
}
else if(comboText == "Selected Option 3")
{
ui->label1->setText("Text when option 3 is selected");
ui->label2->setText("Text when option 3 is selected");
ui->label3->setText("Text when option 3 is selected");
}
}
在您的页眉中确保将 setLabeText 定义为 slot。
private slots:
void setLabelText(const QString comboText);