草庐IT

QT QCombox 选项不可选 置灰

南国红枫叶 2023-04-03 原文

QT QCombox 选项不可选 置灰

前言

QCombox 做一个下拉框,下拉框中的某些选项置为不可选状态

一、实现方法一

通过设置数据的 role 来实现。通过[virtual] bool QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) 函数将数据的角色设置成特定的。

    QModelIndex index = ui->comboBox->model()->index(1,0);
    QVariant v(0);
   ui->comboBox->model()->setData(index, v, Qt::UserRole - 1);

通过更改v 的值可以控制当前 index是否选中。V>0 可选。
ItemDataRole 是标识数据的角色,具体详细的可见qt 的官方文档,常用的枚举值大概有以下:

角色描述
Qt::DisplayRole0显示
Qt::DecorationRole1装饰
Qt::EditRole2编辑
Qt::ToolTipRole3工具提示
Qt::StatusTipRole4状态栏
Qt::WhatsThisRole5在“What’s This?”模式下显示的数据。
Qt::FontRole6字体
Qt::TextAlignmentRole7项目的文本对齐。
Qt::BackgroundRole8背景画笔
ForegroundRole9前景色刷
Qt::CheckStateRole10此角色用于获取项的选中状态
Qt::AccessibleTextRole11可访问性扩展和插件(如屏幕阅读器)所使用的文本
Qt::AccessibleDescriptionRole12用于可访问性目的的项目描述
Qt::SizeHintRole13
Qt::InitialSortOrderRole14设置初始排序
Qt::DisplayPropertyRole27显示属性
Qt::DecorationPropertyRole28装饰属性
Qt:: ToolTipPropertyRole29工具提示
Qt:: StatusTipPropertyRole30tip 属性
Qt:: WhatsThisPropertyRole31whatisthis
Qt:: UserRole0x0100对于用户角色,由开发人员决定使用哪种类型

通过设置不同的角色,得到想要的显示效果。
例如:

// index项 设置背景
ui->combox->setItemData(index, QBrush(QColor(255,100,200)), Qt::BackgroundRole);
// index项 设置字体
ui->combox->setItemData(index, QBrush(QColor(Qt::red)), Qt::ForegroundRole);

二、实现方法二

通过QCombox 组件中的QAbstractItemModel *model() const 拿到QCombox的模型,然后强转成
QStandardItemModel,然后通过行号获取到QStandardItem,设置QStandardItem的flags。

bool en=true;
auto model =qobject_cast<QStandardItemModel *>(ui->comboBox->model());
QStandardItem* item = model->item(2);
item->setFlags(en? item->flags() & ~(Qt::ItemIsSelectable|Qt::ItemIsEnabled): 
Qt::ItemIsSelectable|Qt::ItemIsEnabled);
// visually disable by greying out - works only if combobox has been painted already and palette returns the wanted color
item->setData(en? ui->comboBox->palette().color(QPalette::Disabled, QPalette::Text): 
QVariant(),Qt::TextColorRole);

有关QT QCombox 选项不可选 置灰的更多相关文章

  1. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  2. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  3. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  4. ruby - 选项卡的 Rubocop - 2

    我们想使用Rubocop来验证我们的ruby​​在语法上是否正确并遵循基本代码指南。除此之外我们有这个规则:我们使用制表符缩进以允许任何人决定他们希望如何呈现它们(将它们显示为2或4个空格)问题是rubocop似乎设计为完全拒绝缩进标签。我们怎样才能超越所有这些规则成为太空合规者?编辑:我正在考虑覆盖这个模块https://github.com/bbatsov/rubocop/blob/master/lib/rubocop/source_parser.rb将我文件中的所有制表符替换为2个空格,以创建gem的幻觉... 最佳答案 添加

  5. ruby - Ruby 中的选项菜单 - 2

    我正在尝试在Ruby中创建一个菜单,以便根据用户输入的内容,取决于调用的类。然后在这种情况下它将返回到“Main”或类“Options”。我希望有人能帮助我。这是我的代码。modulePhysicsG=21C=20000Pi=3.14D=100endclassOptionsputs"Pleaseselect1forAccelerationand2forEnergy."option=gets()ifoption==1thenputs"AccelCalc"#ThisisthebitthatneedstodirecttheusertotheclassAccelCalcelseputs"Ene

  6. ruby-on-rails - 用一系列时间增量填充选择,加上其他选项 - 2

    使用RubyonRails,我使用给定的增量(例如每30分钟)用时间填充“选择”。目前我正在YAML文件中写出所有的可能性,但我觉得有一种更巧妙的方法。我想我想提供一个开始时间、一个结束时间、一个增量,并且目前只提供一个名为“关闭”的选项(想想“business_hours”)。所以,我的选择可能会显示:'Closed'5:00am5:30am6:00am...[allthewayto]...11:30pm谁能想出更好的方法,或者只是将它们全部“拼写”出来的最佳方法? 最佳答案 此答案基于@emh的答案。defcreate_hour

  7. ruby - 如何获取适用于 ruby​​ 1.9.1 的 to_yaml 方法的格式化选项? - 2

    根据YAML文档,可以传递hashofoptions到.to_yaml方法。目前,当我按照文档中的建议传递选项时,它不起作用,哈希被忽略。irb(main):001:0>require'yaml'=>trueirb(main):002:0>user={"1"=>{"name"=>"john","age"=>44}}user.to_yaml=>"---\n\"1\":\nname:john\nage:44\n"现在,传递一些选项:irb(main):014:0>user.to_yaml(:Indent=>4,:UseHeader=>true,:UseVersion=>true)=>"--

  8. ruby - 使用 Ruby CSV 创建 Rails 记录,其中字符串字段不可查询 - 2

    我正在尝试将种子数据从CSV文件加载到我的Rails应用程序中。我最初安装了fastercsvgem,却发现从ruby​​1.9开始,fastercsv已被弃用,取而代之的是CSV库。所以在收到一个非常有用的错误告诉我切换后,我切换到CSV。然而,现在我遇到了最奇怪的现象,当我加载数据时一切看起来都很正常,但我似乎无法查询字符串字段。字符串字段由看似正确的字符串填充,但我无法访问它们。我可以查询任何数字字段,结果将返回,但不会返回字符串字段。我尝试使用引号的定界符,但无济于事。我什至从我的csv文件中删除了所有引号,但我仍然无法查询字符串字段。下面是我的代码,以及一些来自Rails控制

  9. ruby - IO::EAGAINWaitReadable:资源暂时不可用 - 读取会阻塞 - 2

    当我尝试使用“套接字”库中的方法“read_nonblock”时出现以下错误IO::EAGAINWaitReadable:Resourcetemporarilyunavailable-readwouldblock但是当我通过终端上的IRB尝试时它工作正常如何让它读取缓冲区? 最佳答案 IgetthefollowingerrorwhenItrytousethemethod"read_nonblock"fromthe"socket"library当缓冲区中的数据未准备好时,这是预期的行为。由于异常IO::EAGAINWaitReadab

  10. ruby - 如何在 Ruby 中设置 SSLContext 选项 - 2

    我需要在Ruby1.8+中创建一个SSLSocket来与加密服务对话。我想在SSLContext对象上设置SSL选项(它最终调用底层OpenSSL库中的SSL_CTX_set_options)。我没有看到任何明显的方法来做到这一点。这是使用OpenSSL::SSL::SSLContext接口(interface)。作为引用点,这类似于调用set_options()在Python的pyOpenSSL库中。 最佳答案 例子:ctx=OpenSSL::SSL::SSLContext.newctx.set_params(:options=>

随机推荐