Qt Creator中的没有的QCombobox类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt Creator中的没有的QCombobox类型相关的知识,希望对你有一定的参考价值。
在Qt Creator中的QComboBox的类型只有两种:但是我想找的有带下拉的文本框,就与第二个字体ComboBox一样,不过不是选择字体的,而是文本框的,怎么也找不到,有哪位朋友告诉我我的问题出在哪里?怎样才可以找到文本框的QComboBox??
参考技术A 不知道你是怎么弄的。。QT Creater里面是有的。。平时用到的控件里面都有的。。就在工作区的左边。。仔细找找。。在上面的搜索框里可以搜索的。。Qt多语言QCombobox
我遇到了多语言qt的问题(动态更改语言)。我的表单有一个组合框,应该在语言改变时翻译。当languageChanged时,应用程序调用方法retranslateUi()来翻译组合框中的项目。组合框具有对应于信号currentIndexChanged()的槽。
void on_comboBox_currentIndexChanged(int index)
{
//do something
}
但是当调用方法retranslateUi()时,我这样做:
void retranslateUi()
{
ui->comboBox->clear();
ui->comboBox->insertItems(0, QStringList()
<< QApplication::translate("SettingDialog", "English", 0, QApplication::UnicodeUTF8)
<< QApplication::translate("SettingDialog", "French", 0, QApplication::UnicodeUTF8)
);
}
问题是:retranslateUi()中的每个语句都会发出信号currentIndexChanged(),然后插槽会再次调用。
我怎么能避免这种情况?
clear()
和insertItems()
将触发组合框的currentIndexchanged(int)
SLOT功能,因为前者将索引更改为-1,稍后当您在0位置插入项目时也会更改索引。
因此,使用如下标志限制on_comboBox_currentIndexChanged(int)
...
void on_comboBox_currentIndexChanged(int index)
{
if(!retranslateFlag)
//do something
}
void retranslateUi()
{
retranslateFlag = true;
ui->comboBox->clear();
ui->comboBox->insertItems(0, QStringList()
<< QApplication::translate("SettingDialog", "English", 0, QApplication::UnicodeUTF8)
<< QApplication::translate("SettingDialog", "French", 0, QApplication::UnicodeUTF8)
);
retranslateFlag = false;
}
另一种解决方案是临时阻止对象的信号:
void retranslateUi()
{
auto isBlocked = ui->comboBox->blockSignals(true);
ui->comboBox->clear();
ui->comboBox->insertItems(0, QStringList()
<< QApplication::translate("SettingDialog", "English", 0, QApplication::UnicodeUTF8)
<< QApplication::translate("SettingDialog", "French", 0, QApplication::UnicodeUTF8);
);
ui->comboBox->blockSignals(isBlocked);
}
或者从Qt 5.3开始使用异常安全的RAII QSignalBlocker
QSignalBlocker blocker(ui->comboBox);
而不是清除comboBox
,你只能通过void QComboBox::setItemText(int index, const QString &text)
更改项目的文本
void retranslateUi()
{
ui->comboBox->setItemText(0, QApplication::translate("SettingDialog", "English", 0, QApplication::UnicodeUTF8));
ui->comboBox->setItemText(1, QApplication::translate("SettingDialog", "French", 0, QApplication::UnicodeUTF8));
}
我假设您的解决方案和ScarCode的答案将丢失comboBox中当前选定的项目。这个解决方案不应该失去它。 (未测试)
以上是关于Qt Creator中的没有的QCombobox类型的主要内容,如果未能解决你的问题,请参考以下文章
Python Qt GUI设计:QComboBox下拉列表框类(基础篇—14)
Python Qt GUI设计:QComboBox下拉列表框类(基础篇—14)
Windows 中的 Qt Creator - 我如何知道正在使用哪个编译器?