我有一个Qt窗口,其中包含一个QComboBox和一些QLabel和QLineEdits。根据用户选择的QComboBox值,我想在窗口仍处于打开状态时在其上动态更改QLabels和QLineEdits。
例如,如果QComboBox具有国家列表,并且用户选择了France,我想将所有QLabels和QLineEdits更改为法语;然后,在单击底部的“保存/关闭”按钮之前,用户应该先用法语填写QLineEdits。
这可以在Qt中完成吗?
答案 0 :(得分:1)
如果您仅在寻找语言翻译,则可以在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定义为插槽。
private slots:
void setLabelText(const QString comboText);