禁用 QSpinbox 中的编辑,但启用箭头。

9

我有一个 QSpinBox,我想启用箭头(用于上下值),但禁止用户插入数据。 我尝试使用以下代码:

QtGui.QSpinBox.setReadOnly(True)

但它不起作用。所有内容都被禁用,箭头也“卡住”了。

3个回答

13

如果你将旋转框设置为只读,它会禁用 一切。相反,只需将行编辑器设置为只读,然后按钮仍将工作:

spinbox.lineEdit().setReadOnly(True)

4
你可以通过QtGui.QSpinBox.lineEdit().setEnabled(False)来阻止Spinboxes编辑器。 编辑:并且设置字体颜色和背景颜色:
spinbox.lineEdit().setStyleSheet('color: black; background-color: white;')

谢谢,它有效了。你有任何想法如何改变字体颜色吗?它会使SpinBox的背景和字体变灰。我尝试了这个:QtGui.QSpinBox.setStyleSheet("color: rgb(161,161,161); ") 但是字体仍然是灰色的。 - roy.me
我认为@ekhumoro的解决方案有一些优点:不需要使用'setStyleSheet',用户可以将值复制到剪贴板中,并且当'readOnly'设置为True时不会显示光标。 - a_manthey_67
黑色和白色背景似乎不起作用...有什么想法吗? - roy.me

2

如果有人在C++中寻找此问题的答案(就像我一样),其他答案并不直接,因为QSpinBox::lineEdit()是受保护的成员(因此还需要扩展该类)。

对我有效的方法是:

    auto l1SpinBox = new QSpinBox(this);
    auto lineEdit = l1SpinBox->findChild<QLineEdit*>();
    lineEdit->setReadOnly(true);
    lineEdit->setFocusPolicy(Qt::NoFocus);
    connect(l1SpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), l1SpinBox,
            [&, lineEdit](){lineEdit->deselect();}, Qt::QueuedConnection);

仅使用setReadOnly可能对您有用。但在我的情况下,我想改善UI,使其不可聚焦,并在值更改时隐藏选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接