我正在制作一个字典程序,在3列子QTableView类中显示单词定义,当用户键入它们时,从QAbstractTableModel子类中获取数据.像这样的东西:
我想在文本中添加各种格式,我用来在数据进入时向每个单元格QAbstractItemView::setIndexWidget添加一个QLabel:
WordView.h
#include <QTableView>
class QLabel;
class WordView : public QTableView {
Q_OBJECT
public:
explicit WordView(QWidget *parent = 0);
void rowsInserted(const QModelIndex &parent, int start, int end);
private:
void insertLabels(int row);
void removeLabels(int row);
};
Run Code Online (Sandbox Code Playgroud)
WordView.cpp
#include <QLabel>
#include "WordView.h"
WordView::WordView(QWidget *parent) :
QTableView(parent)
{}
void WordView::rowsInserted(const QModelIndex &parent, int start, int end) {
QTableView::rowsInserted(parent, start, end);
for (int row = start; row <= end; ++row) {
insertLabels(row);
}
}
void …Run Code Online (Sandbox Code Playgroud) 我有一段Haskell代码:
foo :: Num a => (a -> a) -> Either Integer Double -> Either Integer Double
foo f x = case x of
Left i -> Left $ f i
Right d -> Right $ f d
Run Code Online (Sandbox Code Playgroud)
它不会编译错误"无法匹配类型整数与双精度".我理解这种类型分别f计算为Integer -> Integer和Double -> Doublein Left和Right表达式,从而产生碰撞.
如何更改此功能,以便f每次都使用正确的版本?
背景
我正在尝试为数值创建一个Parsec解析器.这些值可以是Integer或Double.它们也可以是签名或未签名的.我创建了一个符号解析器,它返回idfor +和negatefor的多态函数-.当给定多态符号函数时,我还有一个构造正确版本的表达式节点的函数Either Integer Double.我正在尝试将它们放在一起,如下面的代码的简化版本所示.
{-# LANGUAGE RankNTypes #-}
-- (...)
data Expr = IntExpr Integer | DoubleExpr Double
pSign :: Num a => MyParser (a -> a) -- returns id for + or negate for -
pReal :: (forall a. Num a => a -> a) -> Either Integer Double -> MyParser Expr
pNum :: MyParser Expr
pNum = do
sign <- pSign
numVal <- ParsecToken.naturalOrFloat …Run Code Online (Sandbox Code Playgroud) 创建了QML QtObject:
QtObject {
property int p: 42
property int q: 44
}
Run Code Online (Sandbox Code Playgroud)
将其存储在一个局部变量后QObject *obj,如何打印所有自定义属性的名称,可能值(即只p和q上面的例子)?我希望这适用于任何类(不仅仅是QtObject),而不是打印已经声明的属性Q_PROPERTY.
澄清:通过"自定义",我并不是指未通过QObject::setProperty使用而添加的属性Q_PROPERTY.我的意思是在QML中通过property <type> <name>: <value>符号声明的属性未Q_PROPERTY在QObject该QML对象的子类中声明使用.快速测试表明这些属性没有出现QObject::dynamicPropertyNames.
我有两个相互通信的 Django 项目。第一个包含 modelA并且B有一个ForeignKeyto A。第一个项目发送和接收B来自第二个项目的序列化对象。我希望第二个项目只包含该内容B,但它需要该内容的价值ForeignKey。这些模型定义如下:
class A(models.Model):
...
class B(models.Model):
fk = models.ForeignKey(to='A', on_delete=models.PROTECT)
...
Run Code Online (Sandbox Code Playgroud)
问题是ForeignKey模型需要在第二个项目A中定义B模型。A它的对象也必须存在,以便数据库一致并且不存在问题,例如在管理面板中。
最后,我想在第一个项目中将该fk字段视为成熟的字段ForeignKey,在第二个项目中将该字段视为某种只读通用标识符。具体来说,我需要保留第一个项目中双向查询的功能,例如fk__some_a_field和b_set。我希望两个项目中的模型具有相同的代码库,以确保两个项目中的数据库保持同步。我怎样才能以干净的方式实现这一目标?
编辑:我也在考虑fk = CustomField(...)哪个或多或少被定义为
if IS_FIRST_PROJECT:
CustomField = ForeignKey
else:
CustomField = IntegerField
Run Code Online (Sandbox Code Playgroud)
但问题是我需要一种干净的方法来选择与默认外键完全匹配的整数字段类型。另外,我不确定这样的解决方案是否会带来意想不到的问题。