小编zar*_*ych的帖子

如何使用QMake的子模板?

我开始学习Qt了.我正在从Visual Studio世界转移,我正在寻找一种使用QMake组织项目结构的方法.我找到了'子目标'模板,但我很难理解它.

我的项目结构如下所示:

project_dir/
    main.cpp
    project.pro
    logic/
      logic.pro
      some logic files
    gui/
      gui.pro
      gui files
Run Code Online (Sandbox Code Playgroud)

我的project.pro看起来像这样

TEMPLATE = subdirs
SUBDIRS = logic \
          gui
SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)

在子目录的.pro文件中,我设置了适当的SOURCES,HEADERSRESOURCES变量.

请告诉我在.pro文件中应该设置的TARGET,TEMPLATE和其他必要值.

另外,还有一些不错的官方QMake教程吗?

qt qmake subdirectory

64
推荐指数
2
解决办法
6万
查看次数

Qt中的持久性类

我正在将一个中等大小的CRUD应用程序从.Net移植到Qt,我正在寻找一种创建持久化类的模式.在.Net中,我通常使用基本方法(插入,更新,删除,选择)创建抽象持久化类,例如:

public class DAOBase<T>
{
    public T GetByPrimaryKey(object primaryKey) {...}

    public void DeleteByPrimaryKey(object primaryKey) {...}

    public List<T> GetByField(string fieldName, object value) {...}

    public void Insert(T dto) {...}

    public void Update(T dto) {...}
}
Run Code Online (Sandbox Code Playgroud)

然后,我将其子类化为特定的表/ DTO并添加了DB表布局的属性:

[DBTable("note", "note_id", NpgsqlTypes.NpgsqlDbType.Integer)]
[DbField("note_id", NpgsqlTypes.NpgsqlDbType.Integer, "NoteId")]
[DbField("client_id", NpgsqlTypes.NpgsqlDbType.Integer, "ClientId")]
[DbField("title", NpgsqlTypes.NpgsqlDbType.Text, "Title", "")]
[DbField("body", NpgsqlTypes.NpgsqlDbType.Text, "Body", "")]
[DbField("date_added", NpgsqlTypes.NpgsqlDbType.Date, "DateAdded")]
class NoteDAO : DAOBase<NoteDTO>
{
}
Run Code Online (Sandbox Code Playgroud)

感谢.Net反射系统,我能够实现繁重的代码重用并轻松创建新的ORM.

在Qt中执行此类操作的最简单方法似乎是使用QtSql模块中的模型类.不幸的是,就我而言,它们提供了过于抽象的界面.我至少需要事务支持和控制QSqlTableModel不提供的单个提交.

你能给我一些关于用Qt解决这个问题的提示或者指点一些参考资料吗?


更新:

根据Harald的线索,我实现了一个与上面的.Net类非常相似的解决方案.现在我有两节课.

UniversalDAO继承QObject并使用元类型系统处理QObject DTO:

class UniversalDAO : public QObject
{
    Q_OBJECT

public: …
Run Code Online (Sandbox Code Playgroud)

sql orm qt

8
推荐指数
1
解决办法
8117
查看次数

moc中的宏扩展

我想使用Q_CLASSINFO宏存储一些类信息.但是我想将它包装在我自己的宏中,例如:

#define DB_TABLE( TABLE ) \
    Q_CLASSINFO( "db_table", #TABLE )

#define DB_FIELD( PROPERTY, COLUMN ) \
    Q_CLASSINFO( "dbcol_" #PROPERTY, #COLUMN )

class Foo : public QObject
{
    Q_OBJECT
    DB_TABLE( some_table )
    DB_FIELD( clientName, client_name )
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,moc不会扩展宏,因此不会添加Q_CLASSINFO.

我已经尝试用已经预处理的源来提供moc,但它在一些包含的Qt类上有效.

你知道任何解决方法吗?

qt preprocessor qt4 moc

5
推荐指数
2
解决办法
2723
查看次数

标签 统计

qt ×3

moc ×1

orm ×1

preprocessor ×1

qmake ×1

qt4 ×1

sql ×1

subdirectory ×1