In meiner Anwendung möchte ich einige Elemente in der QComboBox deaktivieren (d. H. Nicht auswählbar, keine Highlights, wenn die Maus darüber schwebt und die Texte ausgegraut sind), wenn bestimmte Bedingungen erfüllt sind.Deaktivieren bestimmter Elemente in QComboBox
Ich tatsächlich gefunden jemand hat die gleiche Frage hier gestellt: Disable Item in Qt Combobox Aber keine dieser Lösungen in den Antworten scheinen tatsächlich zu funktionieren (einschließlich der Trick).
Gibt es einen vernünftigen und "richtigen" Weg, dies zu implementieren?
EDIT:
Ich fand heraus, warum die Fahnen Einstellung würde die Einzelteile in meiner Anwendung nicht deaktivieren: aus irgendwelchen Gründen, ich den Stil QStyle::SH_ComboBox_UseNativePopup
gesetzt hatte (siehe https://codereview.qt-project.org/#/c/82718/). Und diese Einstellung blockierte aus irgendwelchen Gründen die Flag-Einstellung. Hat jemand eine Idee warum und wie man arbeitet? Ein Minimum Testbeispiel enthalten ist (aus der Antwort von @ Mike modifiziert):
#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();
}
haben Sie versucht [ dies] (http://stackoverflow.com/a/21740341/2666212) beantworten? Wenn Sie 'setModel' nicht in Ihrer' QComboBox' verwenden (dh wenn Sie Ihre Elemente mit 'addItem' hinzufügen), sollte dies für Sie funktionieren. – Mike