c++ - 我如何使用与 QVariant 相关的 QComboBox?

标签 c++ qt combobox qvariant

据我了解,QComboBox 可以包含文本(即名称)和数据(即对象)。我的 QComboBox 应该存储 QSizeF,同时显示漂亮的名称。因此我想做这样的事情:

void fillComboBox() {
    ui->combobox->addItem("big", QVariant(QSizeF(600,400)));   
    ui->combobox->addItem("medium", QVariant(QSizeF(300,300)));   
    ui->combobox->addItem("small", QVariant(QSizeF(100,200)));
}

问题是,QVariant 通过const 引用获取QSizeF,而不是通过值/移动。返回后,引用将因此悬空。

正确的做法是什么?如果我有一个类型 MyClass,因此是一个自定义类而不是 Qwhatever,我将如何使用 QVariante

注意:我当然可以在堆上创建 QSizeF - 但是,我需要处理我尽量避免的内存。这最终是我提出问题的原因。

最佳答案

您在没有问题的地方看到了问题。

  1. const& 将保持它引用的(在本例中是临时的)对象,直到引用本身超出范围。

  2. 如果您查看 QVariant 的实现,您会发现它复制了值。

这里没有问题 - 继续前进。

关于c++ - 我如何使用与 QVariant 相关的 QComboBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512243/

相关文章:

c++ - 你会如何迭代一个 vector ?

c++ - Qt C++ Pong球方向

css - QtWebkit渲染非标准字体,斜体和普通切换

c++ - Q_OBJECT 导致 'undefined reference to v_table' 问题

c# - 如何在WPF中设计这样的区域设置

wpf - ComboBox和 Entity Framework ,如何获取ID? (WPF-MVVM)

c++ - 值初始化与聚合初始化

c++ - 为什么 std::get for variant 会引发失败而不是未定义的行为?

c++ - 检查数组中元素的相等性 - C++

javascript - 扩展点击时Extjs为空组合框值