在我的应用程序中,我想在满足某些条件时禁用QComboBox中的某些项目(即不可选择,当鼠标悬停在上面时没有突出显示,文本显示为灰色).
我确实发现有人在这里问过同样的问题:在Qt Combobox中禁用项目 但是答案中的这些解决方案似乎都没有实际工作(包括技巧).
是否有一个体面和"正确"的方式来实现这一点?
编辑:
我发现为什么设置标志不会禁用我的应用程序中的项目:由于某些原因,我必须设置样式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, …
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我需要更改鼠标光标并在Alt
按下键后做一些不同的事情,并在Alt
释放键后返回到正常光标和正常行为。
在Mac OS上,一切正常,而Alt
-pressing事件将焦点移至Windows上的菜单栏(Windows的本机行为),这导致了我的光标更改期望的意外行为。
所以问题是:如何禁用此Windows功能(当然是Qt中的代码方式),并始终将Alt
按键事件传递给应用程序本身而不是菜单栏。
假设在 C++ 端,我创建了一个QList<QObject *> myObjects
包含多个从QObject
.
然后通过以下方式将其公开给 QML setContextProperty( "myModel", QVariant::fromValue( myObjects ) );
问题是,在我的 QML 代码中,如何获取和使用(按索引)中的特定元素(myModel
即 a QList
)。例如,我想从列表中随机抽取一个元素并显示它?
示例在这里:http : //doc.qt.io/qt-5/qtquick-models-objectlistmodel-example.html,其中模型的所有元素都显示在 ListView` 中,而我只想显示一个(或几个)。