小编Way*_*yee的帖子

禁用QComboBox中的特定项

在我的应用程序中,我想在满足某些条件时禁用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)

qt

8
推荐指数
2
解决办法
6114
查看次数

Qt-在Windows上按Alt键后防止菜单栏获取焦点

在我的应用程序中,我需要更改鼠标光标并在Alt按下键后做一些不同的事情,并在Alt释放键后返回到正常光标和正常行为。

在Mac OS上,一切正常,而Alt-pressing事件将焦点移至Windows上的菜单栏(Windows的本机行为),这导致了我的光标更改期望的意外行为。

所以问题是:如何禁用此Windows功能(当然是Qt中的代码方式),并始终将Alt按键事件传递给应用程序本身而不是菜单栏。

c++ windows qt

5
推荐指数
1
解决办法
493
查看次数

如何在 QML 中访问基于 QObjectList 的模型中的某些元素

假设在 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` 中,而我只想显示一个(或几个)。

c++ qt qml qt5

2
推荐指数
1
解决办法
3066
查看次数

标签 统计

qt ×3

c++ ×2

qml ×1

qt5 ×1

windows ×1