- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经向 QTableView
添加了一个自定义委托(delegate)器。当我双击一个项目时,我看到编辑器小部件是一个“QSpinBox”,我可以很好地编辑该值。一旦失去焦点,这个编辑器小部件就会消失,我明白这一点。我想要的是 QSpinBox
一直在那里。查看 Qt 示例 here我知道我需要覆盖 QAbstractItemDelegate
类的 paint
函数来绘制 QSpinBox
但我不知道该怎么做。一般来说,我想知道如何在绘制函数中绘制任何 Qt 小部件。
作为引用,我有以下测试代码:
#include <QtWidgets/QApplication>
#include <QtGui>
#include <QTableview>
#include <QLayout>
#include <QColor>
#include <QStyledItemDelegate>
#include <QSpinbox>
class SpinBoxDeligate : public QStyledItemDelegate {
public:
QWidget * createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const override {
auto w = new QSpinBox(parent);
w->setFrame(false);
w->setMinimum(0);
w->setMaximum(100);
return w;
}
void setEditorData(QWidget *editor, const QModelIndex &index) const override {
static_cast<QSpinBox*>(editor)->setValue(index.data(Qt::EditRole).toInt());
}
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override {
model->setData(index, static_cast<QSpinBox*>(editor)->value(), Qt::EditRole);
}
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
// What to replace below line with to have a QSpinBox
QStyledItemDelegate::paint(painter, option, index);
}
};
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QStandardItemModel model(3, 1);
for (int r = 0; r < 3; ++r)
{
auto text = QString("%0").arg(r);
QStandardItem* item = new QStandardItem(text);
item->setFlags(Qt::ItemIsUserCheckable
| Qt::ItemIsEnabled
| Qt::ItemIsEditable
);
item->setData(Qt::Unchecked, Qt::CheckStateRole);
item->setData(text, Qt::ToolTipRole);
item->setData(QSize(100, 30), Qt::SizeHintRole);
item->setData(QIcon(":/QtMVC/Desert.jpg"), Qt::DecorationRole);
model.setItem(r, 0, item);
}
QTableView* table = new QTableView();
table->setModel(&model);
table->setItemDelegate(new SpinBoxDeligate());
QWidget w;
QVBoxLayout* containerLayout = new QVBoxLayout();
w.setLayout(containerLayout);
containerLayout->addWidget(table);
w.show();
return app.exec();
}
最佳答案
您的背景问题的一个可能的解决方案是使用 paint()
并且为此您可以创建一个 QSpinBox 并使用 grab 来拍摄图像,但在此之前您应该计算几何形状以便它不包括 QCheckBox,如您所见,这是一项乏味的工作,另一种方法是使用 QStyle,但它仍然需要更多代码。
一个简单的解决方案是使用 openPersistentEditor()
保持编辑器打开方法。
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QStandardItemModel model(3, 1);
QTableView* table = new QTableView();
table->setModel(&model);
table->setItemDelegate(new SpinBoxDeligate());
for (int r = 0; r < 3; ++r)
{
auto text = QString("%0").arg(r);
QStandardItem* item = new QStandardItem(text);
item->setFlags(Qt::ItemIsUserCheckable
| Qt::ItemIsEnabled
| Qt::ItemIsEditable
);
item->setData(Qt::Unchecked, Qt::CheckStateRole);
item->setData(text, Qt::ToolTipRole);
item->setData(QSize(100, 30), Qt::SizeHintRole);
item->setData(QIcon(":/QtMVC/Desert.jpg"), Qt::DecorationRole);
model.setItem(r, 0, item);
table->openPersistentEditor(model.indexFromItem(item));
}
QWidget w;
QVBoxLayout* containerLayout = new QVBoxLayout();
w.setLayout(containerLayout);
containerLayout->addWidget(table);
w.show();
return app.exec();
}
关于c++ - 如何覆盖自定义委托(delegate)类的 'paint'函数来绘制QSpinBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51743463/
我正在使用 Qt 5.3.2与 Qt Creator 3.2.1与 MinGW 4.8.2在 Windows 7 .我有一个 QSpinBox并且仅当鼠标悬停在 QSpinBox 上时才能使用鼠标滚轮
我有一个QSpinBox,它应该只接受一组离散值(比如说2、5、10)。我可以 setMinimum(2) 和 setMaximum(10),但不能 setSingleStep 因为我的步长为 3,步
是否可以使用带有二进制输入的旋转盒。让我们说“10010”。向上和向下滚动进行二进制递增/递减。 最佳答案 您必须设置 displayIntegerBase属性设置为 2 以使用二进制系统: impo
我有 QSpinBox,它应该只接受奇数,所以我将初始值设置为 3,并将步长设置为 2。 QSpinBox* spinBox = new QSpinBox; spinBox->setValue(3);
我目前正在实现一个自定义委托(delegate),其中一部分我需要在 paint(..) 方法中绘制一个 QSpinBox。 void Sy_floatingPointPD::paint( QPain
使用 QSpinBox 是否可以在用户输入数字时显示数字的千位分隔符像 10,000哪种方法最好? 最佳答案 我知道这已经晚了,但这可能会帮助其他人。我用它来更新千位分隔符 ui->doubleSpi
我有一个 QSpinBox,我想在其中启用箭头(用于向上和向下值)但禁止用户插入数据。 我试过用这个: QtGui.QSpinBox.setReadOnly(True) 但它不起作用。全部被禁用,箭头
我有一个小部件,其中包含 QSpinBox 。这个小部件还有一个 QVector Values 。我想做的是获取 QSpinBox显示从 Values 发出的值仅。 起初我认为我的小部件中的新插槽和信
我知道这个问题已经以类似的方式提出,但我迷失在使用QSpinBox(或QDoubleSpinBox<时可以选择的许多信号的广阔世界中)/)。我想将我的函数连接到 editingFinished 信号(
我的 PySide 项目中有许多旋转框,我想更改行为,因此用户需要单击字段来更改值,然后按 Enter 键。我想禁用旋转框的滚轮行为。我尝试过设置焦点策略,但没有生效。 def light_l
感觉我已经到处寻找但找不到答案。想知道是否有办法向 QSpinBox ContextMenu 添加额外的 QActions?最好位于操作列表的顶部。 我知道您可以替换默认菜单,如下所示,但可以弄清楚如
(来源:metrotek.spb.ru) 如何使用 Qt CSS 帮助完成它? 我已经尝试使用了 subcontrol-origin: margin; position: absolute; 但没有成
我的程序编译并正确显示我的按钮,但由于某种原因它没有显示 QSpinBox 的。我是 C++ qt GUI 的新手,所以任何输入都将不胜感激。我还检查了微调器是否被按钮重叠,但它们没有。 // //
有没有办法做到这一点?要手动执行此操作,我右键单击旋转框内部并选择“全选”。最终目标是以“选定”状态呈现微调框。我想知道这是否可以在不子类化 QSpinBox 的情况下完成(纯粹出于懒惰)。 最佳答案
假设我有一个 QSpinBox,其中的值为 123.45。如果我手动编辑它并开始删除这五个值,则 valueChanged 会针对值 123.4 被触发。如果我继续删除这四个,就会再次发生。 如果我在
我已尝试通过各种方式搜索此问题,但没有找到任何相关问题,因此也许有一种简单的方法可以解决这个问题,但我只是没有找到。如果是这样,我提前道歉。 我在我的应用程序中使用了一些 QSpinBoxes,我发现
我正在尝试创建一个接受所有数字的 QSpinBox,但我在处理最大值时遇到了一些问题 sbox = QSpinBox(self) sbox.setRange(-sys.maxint/88-1, s
有没有一种简单的方法可以在 PyQt4 中创建一个可变值是字符串的旋转框?我想创建一个在“低”、“中”和“高”之间变化的旋转框。我环顾四周,找不到任何看起来不太复杂的东西。在 Tkinter 中,它可
所以我正在为一些科学软件编写 Qt GUI,并且我有 QSpinBoxes 和 QDoubleSpinBoxes 用于用户应该设置其单位的数量。因为我连续有几个这样的旋转框-组合框对,所以我认为将右侧
我在 Qt 中有一个 QSpinBox。该小部件带有一个 increaseValue 和一个 decreaseValue 箭头。单击箭头会增加由 singleStep 确定的值,而按住箭头会每 X 毫
我是一名优秀的程序员,十分优秀!