gpt4 book ai didi

c++ - QComboBox 设置标题文本而不考虑项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:34 28 4
gpt4 key购买 nike

我有一个带有 QStandardModel 的 QComboBox,我通过以下方式向其添加项目:

QStandardItem * item = new QStandardItem();
item->setText("someText");
item->setCheckable(true);

item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
item->setData(Qt::Checked, Qt::CheckStateRole);

m_model->appendRow(item);
m_ComboBox->setModel(m_model);

这给了我一个带复选框的组合框,这正是我想要的。现在,当用户取消选择所有项目时,“无”应该是下拉菜单的文本。如果用户选择了一些项目,“多个”将是文本。

我还没有找到关于如何设置 QComboBox 的标题文本的方法。除了子类化和自己做之外,还有什么方便的方法吗?

最佳答案

没有子类化就没有方便的方法。事实上,子类化是最方便的方法。

即使您可以运行您的 QComboBox 模型并检查哪些项目被选中或未被选中,您也无法告诉您的组合框在项目全部(或部分全部)被选中后自行更新。没有信号或特定功能允许您这样做。

但是将您的 QComboBox 子类化为具有此行为并不是很复杂:您需要重新实现 paintEvent()。

//return a list with all the checked indexes
QModelIndexList MyComboBox::checkedIndexes()const
{
return model()->match(model()->index(0, 0), Qt::CheckStateRole, Qt::Checked, -1, Qt::MatchRecursive);
}

// returns a list with all the unchecked indexes
QModelIndexList MyComboBox::uncheckedIndexes()const
{
return model()->match(model()->index(0, 0), Qt::CheckStateRole, Qt::Unchecked, -1, Qt::MatchRecursive);
}

//return true if all the items are checked
bool MyComboBox::allChecked()const
{
return (uncheckedIndexes().count() == 0);
}

//return true if all the items are unchecked
bool MyComboBox::noneChecked()const
{
return (checkedIndexes().count() == 0);
}

void MyComboBox::paintEvent(QPaintEvent *)
{
QStylePainter painter(this);

// draw the combobox frame, focusrect and selected etc.
QStyleOptionComboBox opt;
this->initStyleOption(&opt);

// all items are checked
if (allChecked())
opt.currentText = "All";
// none are checked
else if (noneChecked())
opt.currentText = "None";
//some are checked, some are not
else
opt.currentText = "Multiple";

painter.drawComplexControl(QStyle::CC_ComboBox, opt);

// draw the icon and text
painter.drawControl(QStyle::CE_ComboBoxLabel, opt);
}

关于c++ - QComboBox 设置标题文本而不考虑项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com