浏览代码

UI: Search combo item with QVariant type

A combobox with `OBS_COMBO_FORMAT_FLOAT` type couldn't be initialized to
select current item from the settings data. This commit will create
QVariant value with the similar code as that of adding the items and
search the current item using that value.
Norihiro Kamae 3 年之前
父节点
当前提交
766d1bb5b1
共有 1 个文件被更改,包括 15 次插入15 次删除
  1. 15 15
      UI/properties-view.cpp

+ 15 - 15
UI/properties-view.cpp

@@ -541,30 +541,30 @@ static void AddComboItem(QComboBox *combo, obs_property_t *prop,
 template<long long get_int(obs_data_t *, const char *),
 template<long long get_int(obs_data_t *, const char *),
 	 double get_double(obs_data_t *, const char *),
 	 double get_double(obs_data_t *, const char *),
 	 const char *get_string(obs_data_t *, const char *)>
 	 const char *get_string(obs_data_t *, const char *)>
-static string from_obs_data(obs_data_t *data, const char *name,
-			    obs_combo_format format)
+static QVariant from_obs_data(obs_data_t *data, const char *name,
+			      obs_combo_format format)
 {
 {
 	switch (format) {
 	switch (format) {
 	case OBS_COMBO_FORMAT_INT:
 	case OBS_COMBO_FORMAT_INT:
-		return to_string(get_int(data, name));
+		return QVariant::fromValue(get_int(data, name));
 	case OBS_COMBO_FORMAT_FLOAT:
 	case OBS_COMBO_FORMAT_FLOAT:
-		return to_string(get_double(data, name));
+		return QVariant::fromValue(get_double(data, name));
 	case OBS_COMBO_FORMAT_STRING:
 	case OBS_COMBO_FORMAT_STRING:
-		return get_string(data, name);
+		return QByteArray(get_string(data, name));
 	default:
 	default:
-		return "";
+		return QVariant();
 	}
 	}
 }
 }
 
 
-static string from_obs_data(obs_data_t *data, const char *name,
-			    obs_combo_format format)
+static QVariant from_obs_data(obs_data_t *data, const char *name,
+			      obs_combo_format format)
 {
 {
 	return from_obs_data<obs_data_get_int, obs_data_get_double,
 	return from_obs_data<obs_data_get_int, obs_data_get_double,
 			     obs_data_get_string>(data, name, format);
 			     obs_data_get_string>(data, name, format);
 }
 }
 
 
-static string from_obs_data_autoselect(obs_data_t *data, const char *name,
-				       obs_combo_format format)
+static QVariant from_obs_data_autoselect(obs_data_t *data, const char *name,
+					 obs_combo_format format)
 {
 {
 	return from_obs_data<obs_data_get_autoselect_int,
 	return from_obs_data<obs_data_get_autoselect_int,
 			     obs_data_get_autoselect_double,
 			     obs_data_get_autoselect_double,
@@ -590,13 +590,13 @@ QWidget *OBSPropertiesView::AddList(obs_property_t *prop, bool &warning)
 	combo->setMaxVisibleItems(40);
 	combo->setMaxVisibleItems(40);
 	combo->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 	combo->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 
 
-	string value = from_obs_data(settings, name, format);
+	QVariant value = from_obs_data(settings, name, format);
 
 
 	if (format == OBS_COMBO_FORMAT_STRING &&
 	if (format == OBS_COMBO_FORMAT_STRING &&
 	    type == OBS_COMBO_TYPE_EDITABLE) {
 	    type == OBS_COMBO_TYPE_EDITABLE) {
-		combo->lineEdit()->setText(QT_UTF8(value.c_str()));
+		combo->lineEdit()->setText(value.toString());
 	} else {
 	} else {
-		idx = combo->findData(QByteArray(value.c_str()));
+		idx = combo->findData(value);
 	}
 	}
 
 
 	if (type == OBS_COMBO_TYPE_EDITABLE)
 	if (type == OBS_COMBO_TYPE_EDITABLE)
@@ -607,9 +607,9 @@ QWidget *OBSPropertiesView::AddList(obs_property_t *prop, bool &warning)
 		combo->setCurrentIndex(idx);
 		combo->setCurrentIndex(idx);
 
 
 	if (obs_data_has_autoselect_value(settings, name)) {
 	if (obs_data_has_autoselect_value(settings, name)) {
-		string autoselect =
+		QVariant autoselect =
 			from_obs_data_autoselect(settings, name, format);
 			from_obs_data_autoselect(settings, name, format);
-		int id = combo->findData(QT_UTF8(autoselect.c_str()));
+		int id = combo->findData(autoselect);
 
 
 		if (id != -1 && id != idx) {
 		if (id != -1 && id != idx) {
 			QString actual = combo->itemText(id);
 			QString actual = combo->itemText(id);