特定の条件が満たされたときに、QComboBoxで項目を無効にしたい(つまり、選択できない、マウスの上にマウスを置いたときにハイライトがない、テキストがグレー表示される)QComboBoxで特定の項目を無効にする
私は確かに誰かがここに同じ質問をするんでした:答えでDisable Item in Qt Combobox しかし、これらのソリューションのいずれもが、実際に(トリックを含む)が動作するように見えます。
これを実装するには適切かつ正しい方法がありますか?
EDIT:私のアプリケーション内の項目を無効にしないだろうフラグを設定する理由は、私が見つけた
:いくつかの理由のために、私はスタイルQStyle::SH_ComboBox_UseNativePopup
を設定する必要がありました(https://codereview.qt-project.org/#/c/82718/を参照してください)。何らかの理由でこの設定がフラグ設定をブロックしました。なぜ誰かがアイデアを持ち、回避する方法はありますか? (@マイクの答えから変更)最小試験例含まれた:私のコメントにリンクされ
#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();
}
あなたは試すんでした[ this](http://stackoverflow.com/a/21740341/2666212)答え?あなたの 'QComboBox'で' setModel'を使用していない場合(つまり、あなたが 'addItem'を使ってあなたのアイテムを追加している場合)、これはうまくいくはずです。 – Mike