В моем приложении я хочу отключить некоторые элементы (т. Е. Не выбираемые, без подсветки при наведении курсора мыши выше, а тексты выделены серым цветом) в QComboBox при выполнении определенных условий.Отключить определенные элементы в QComboBox
Я действительно нашел, что кто-то задал тот же вопрос здесь: Disable Item in Qt Combobox Но ни одно из этих решений в ответах не работает на самом деле (включая трюк).
Есть ли достойный и «правильный» способ реализовать это?
EDIT:
я узнал, почему установка флагов не будет отключать элементы в моем приложении: по некоторым причинам, я должен был установить стиль QStyle::SH_ComboBox_UseNativePopup
(см https://codereview.qt-project.org/#/c/82718/). И эта настройка по некоторым причинам заблокировала установку флага. У кого-нибудь есть идея, почему и как работать? Минимальный пример теста входит (измененная из ответа @ Mike):
#include <QApplication>
#include <QComboBox>
#include <QStandardItemModel>
#include <QProxyStyle>
class ComboBoxStyle : public QProxyStyle
{
public:
int styleHint (StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0) const override
{
if (hint == QStyle::SH_ComboBox_UseNativePopup)
{
return 1;
}
return QProxyStyle::styleHint(hint, option, widget, returnData);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QComboBox comboBox;
// Setting this style would block the flag settings later on.
comboBox.setStyle(new ComboBoxStyle());
comboBox.insertItem(0, QObject::tr("item1"));
comboBox.insertItem(1, QObject::tr("item2"));
QStandardItemModel* model = qobject_cast<QStandardItemModel*>(comboBox.model());
QStandardItem* item= model->item(1);
item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
comboBox.show();
return a.exec();
}
вы пытались [ это] (http://stackoverflow.com/a/21740341/2666212) ответ? если вы не используете 'setModel' в своем' QComboBox' (т. е. добавляете свои элементы с помощью 'addItem'), это должно сработать для вас. – Mike