【问题标题】:QComboBox AbstractItemView::itemQComboBox AbstractItemView::item
【发布时间】:2012-10-29 18:55:47
【问题描述】:

有没有办法可以增加 QComboBox 控件中列出的项目的高度?

我按照这里的建议尝试了in QTDevNet forums,但没有运气

QComboBox QAbstractItemView::item {margin-top: 3px;}

我也试过了,还是没有结果。

QComboBox QAbstractItemView::item {min-height: 20px;}

是否有可能在样式表级别实现这一点?

【问题讨论】:

    标签: qt qt4 qcombobox qtstylesheets


    【解决方案1】:

    您的样式表似乎正确,所以我试了一下。看来问题类似于this one on Qt centre:

    QCompleter 在它的模型上设置了一个自定义的QAbstractItemDelegate,不幸的是这个自定义项委托没有继承QStyledItemDelegate,而只是继承了QItemDelegate(然后覆盖了paint 方法以显示选定的状态)。

    如果您用QStyledItemDelegate 替换默认委托,您的样式表应该可以工作:

    QStyledItemDelegate* itemDelegate = new QStyledItemDelegate();
    combo->setItemDelegate(itemDelegate);
    

    重要提示:如果更改模型,则会重置视图的委托,因此需要在调用 setModel() 之后调用上述方法。

    【讨论】:

    • 看来这是实现我的要求最不痛苦的方式,谢谢
    • 对我来说,它仍然不起作用。我照你说的做了,也试过用同样的风格,还是不行。保持原样。
    • 对于像@darkgaze 这样在使用此解决方案后仍然遇到问题的人,请尝试在样式表中使用QComboBox ::item 作为您的选择器。这个答案和那个选择器对我有用。
    • 这对我有帮助 - 谢谢和 +1!引用的文章说,这必须在致电setModel() 之后完成 - 如果属实,那么这里真的值得一提。
    • 另一个建议:如果视图中项目的高度不起作用,请尝试在setItemDelegate之后添加来自cpp的项目。从 QtDesigner 添加项目时,我遇到了样式表问题。
    【解决方案2】:

    另一个solution 是:

    ui->comboBox->model()->setData(ui->comboBox->model()->index(-row-, 0), QSize(-width-, -height-), Qt::SizeHintRole);

    ,其中-row- 是从零开始的项目索引; -width--height- 分别代表项目宽度提示和高度提示。

    【讨论】:

      【解决方案3】:

      QComboBox::item 为我工作

      因此,例如,我试图在项目被禁用时更改它的颜色,下面的代码就成功了。

      这个没用:

      QComboBox QAbstractItemView::item:!enabled {
          color:red;
      }
      

      我使用的是:

      QComboBox::item:!enabled {
          color:red;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-05
        相关资源
        最近更新 更多