我有一个 Qt/C++ 应用程序,它在一个拥挤的窗口中包含许多(不可编辑的)QComboBox 小部件。用户可以单击这些组合框从各种类型的单位中进行选择。为了保持窗口宽度易于管理,QComboBoxes 需要尽可能地瘦。

从概念上讲,组合框中可用的单位类型如下:

feet
meters
milliseconds
[etc]

...但为了让 QComboBoxes 尽可能地瘦,它们在屏幕上用缩写表示,例如:
f
m
mS
[etc]

...到目前为止,很好,但是管理人员现在想要的是让非缩写字符串(“英尺”、“米”、“毫秒”等)显示在用户出现的弹出菜单中单击 QComboBox... 同时在框中保留缩写形式。这在逻辑上似乎是可行的(因为弹出菜单只是短暂地出现在 GUI 的其余部分之前,没有根本原因不能使其变宽),但我不清楚如何使用 QComboBox 实现这一点。

有没有“正确的方法”来做到这一点(除了破解 Qt 组合框代码)?

最佳答案

委托(delegate)会更简单:

class Delegate : public QStyledItemDelegate {
public:
    QString displayText(const QVariant & value, const QLocale & locale) const override {
        // value contains one of your short labels {"mS", "f", "m"}
        return /* Just return the corresponding long label */;
    }
};


yourComboBox->setItemDelegate(new Delegate);

关于c++ - 如何为 QComboBox 的弹出菜单指定与框本身显示不同的字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37733118/

10-11 22:41
查看更多