Qt 如何避免 ui.retranslateui 重置combobox的data值
时间: 2024-01-21 10:17:22 浏览: 171
在 Qt 中,`ui.retranslateUi()` 会重置所有界面组件的文本值,包括 `QComboBox` 中的选项文本。如果你想要避免 `ui.retranslateUi()` 重置 `QComboBox` 的数据(例如选项列表),可以使用以下方法:
1. 在 `retranslateUi()` 函数中手动更新 `QComboBox` 的选项文本,而不是调用 `ui.comboBox->addItem()` 等函数。例如:
```cpp
void MainWindow::retranslateUi()
{
// 先保存当前选项的值
QString currentText = ui.comboBox->currentText();
// 清空选项列表
ui.comboBox->clear();
// 添加新的选项文本
ui.comboBox->addItem(tr("Option 1"));
ui.comboBox->addItem(tr("Option 2"));
// 恢复之前的选项值
ui.comboBox->setCurrentText(currentText);
}
```
2. 将 `QComboBox` 的数据存储在类成员变量中,然后在 `retranslateUi()` 函数中重新设置选项列表。例如:
```cpp
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
private:
Ui::MainWindow ui;
QStringList m_comboItems; // 存储选项列表
private slots:
void onComboBoxCurrentIndexChanged(int index);
void onButtonClicked();
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
// 初始化选项列表
m_comboItems << tr("Option 1") << tr("Option 2");
ui.comboBox->addItems(m_comboItems);
// 连接信号槽
connect(ui.comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboBoxCurrentIndexChanged(int)));
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
}
void MainWindow::retranslateUi()
{
// 更新选项列表
m_comboItems.clear();
m_comboItems << tr("Option 1") << tr("Option 2");
ui.comboBox->clear();
ui.comboBox->addItems(m_comboItems);
}
void MainWindow::onComboBoxCurrentIndexChanged(int index)
{
qDebug() << "Current index:" << index << "Current text:" << ui.comboBox->currentText();
}
void MainWindow::onButtonClicked()
{
// 输出当前选项的值
qDebug() << "Current text:" << ui.comboBox->currentText();
}
```
以上两种方法都可以避免 `ui.retranslateUi()` 重置 `QComboBox` 的数据。具体选择哪一种方法取决于你的需求。
阅读全文