Как изменить содержимое окна на основе значения QComboBox - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть окно Qt, которое содержит QComboBox и несколько QLabels и QLineEdits.Основываясь на значении QComboBox, которое выбирает пользователь, я хотел бы динамически изменять QLabels и QLineEdits в окне, пока оно все еще открыто.

Например, если QComboBox имеет список стран и пользователявыбирая Францию, я хотел бы изменить все QLabels и QLineEdits на французский;После этого пользователь должен заполнить QLineEdits на французском языке, прежде чем нажимать кнопку «Сохранить / Закрыть» внизу.

Можно ли это сделать в Qt?

1 Ответ

1 голос
/ 13 апреля 2019

Если вы ищете только языковой перевод, есть и другие способы сделать это в Qt, где вы можете использовать словари для перевода текста пользовательского интерфейса. Взгляните на https://doc.qt.io/qt-5/qtlinguist-hellotr-example.html

Но, похоже, ваш вопрос не предназначен только для языка, поэтому для этого вы можете использовать сигнал currentTextChanged QComboBox и слот, который будет получать текущее значение и обновлять метки на основе этого текста. В качестве альтернативы, если вы не хотите использовать группу ifs, вы можете использовать сигнал currentIndexChanged и использовать переключатель.

В моем файле пользовательского интерфейса у меня есть (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);
...