小编use*_*977的帖子

如何指示cmake/automoc查找外部标头

我有一个Qt小部件C++类,它加载在Qt Creator中创建的ui文件.该类的头文件和源文件位于两个单独的目录中.我无法指示cmake/automoc找到该类的标头.cmake认识到它需要moc C++文件,但它无法找到类似的标题.

有什么我可以帮助cmake找到文件?

如果cpp和头文件都在同一目录中,一切正常.只有在标题位于别处时才会出现此问题.

我的目录结构是

project
    src
        include
            Foo
                Bar.h
    lib
        Foo
            Bar.cpp
            forms
                Bar.ui           
Run Code Online (Sandbox Code Playgroud)

在src/include/Foo/Bar.h我有:

// Bar.h
#include <QtWidgets/QWidget>

namespace Ui { class Bar; }

class Bar : public QWidget {
    Q_OBJECT
    ...
}
Run Code Online (Sandbox Code Playgroud)

在src/Foo/Bar.cpp文件中:

#include "Foo/Bar.h"
#include "moc_Bar.cpp"
#include "ui_Bar.h"
Run Code Online (Sandbox Code Playgroud)

我在src/lib/Foo中的CMakeLists.txt设置如下:

# there is a project() call at the root that defines PROJECT_SOURCE_DIR
set(PUBLIC_HEADERS_DIR ${PROJECT_SOURCE_DIR}/src/include)

# Pick up public library headers
include_directories(${PUBLIC_HEADERS_DIR})

# Pick up private headers in library dir    
include_directories(${CMAKE_CURRENT_SOURCE_DIR})

# Set up Qt
set(CMAKE_AUTOMOC ON) …
Run Code Online (Sandbox Code Playgroud)

qt cmake moc qt5

10
推荐指数
1
解决办法
2444
查看次数

如何增加野牛的堆栈大小(并解决"内存耗尽")

我的基于野牛的解析器开始窒息我最近生成的一些中等大小的文件.

它引发了一个关于"内存耗尽"的例外.

野牛手册页说这可能是由于使用了右手递归.不试图重写语法(我在一个紧迫的截止日期),我想简单地增加堆栈以使解析器解析此文件.我试图跟随bison手册页和#define YYMAXDEPTH到一些大于默认10000的数字,但是这不起作用.当我查看bison的输出时,似乎YYMAXDEPTH仅在定义YYSTACK_RELOCATE时有条件地使用,并且仅在这种情况下定义了YYSTACK_RELOCATE:

#if (! defined yyoverflow \
     && (! defined __cplusplus \
         || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
             && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
Run Code Online (Sandbox Code Playgroud)

由于我使用C++进行编译,因此上述#ifdef失败,因此未定义YYSTACK_RELOCATE.

这是一个错误还是一个功能?谁知道增加堆栈大小的正确方法是什么?

顺便说一下,这是堆栈溢出的bison生成代码的片段:

....
....
if (yyss + yystacksize - 1 <= yyssp)
{
  /* Get the current used size of the three stacks, in elements.  */
  YYSIZE_T yysize = yyssp - yyss + 1;

#ifdef yyoverflow
  {
    /* Give user a chance to reallocate the stack.  Use copies of
       these so that the &'s …
Run Code Online (Sandbox Code Playgroud)

stack parsing bison

6
推荐指数
1
解决办法
1395
查看次数

QTableView列的相对大小提示

我有一个带有自己的自定义模型的QTableView。它包含一个文本列表,每个文本列的最大大小有很大的不同。

我知道我可以实现自己的项目委托来为列提供大小提示,但是看起来是以像素为单位指定的。我宁愿以与分辨率无关的方式执行此操作。

有没有一种方法可以按比例指定所需的列大小,类似于在布局中水平拉伸因子如何工作?

qt qtableview qt5

3
推荐指数
1
解决办法
1199
查看次数

方法回调的C++ 11模板别名

是否可以使用C++ 11模板别名进行方法回调?

我有一个模板化方法,它将方法回调作为其输入参数之一,例如:

class Foo {
  public:
    template <typename OtherClass, typename T>
    void Bar(void (OtherClass::*callback)(T *));
};
Run Code Online (Sandbox Code Playgroud)

我希望能够重写Bar()原型,以便它使用一个类型,因为我将在实现中的几个地方使用相同的类型.我尝试使用下面的新C++ 11别名,但它不起作用.

class Foo {
  public:
     // This does not work
     template <typename OtherClass, typename T>
     using Callback = void (OtherClass::*)(T *object);

     void Bar(Callback callback);
};
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我找不到一个如何在我最喜欢的几个C++ 11参考网站上工作的例子.

c++ alias templates typedef c++11

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

使用 Qt 和 cmake 构建非控制台 Windows 应用程序

我无法找到在 Windows 下使用 cmake、Qt5 和 Visual C++ 构建非控制台应用程序的最新方法。看起来在 Qt4 时代,将 QT_USE_QTMAIN 设置为 true 就足够了。现在据说链接 Qt5::WinMain 就足够了。但是,这些都不适合我 - 我的应用程序继续打开控制台窗口。我在 cmake 或 Qt 文档中也找不到任何内容。

让应用程序停止打开控制台窗口的已记录/经过验证的方法是什么?

qt cmake visual-c++

0
推荐指数
1
解决办法
1853
查看次数

标签 统计

qt ×3

cmake ×2

qt5 ×2

alias ×1

bison ×1

c++ ×1

c++11 ×1

moc ×1

parsing ×1

qtableview ×1

stack ×1

templates ×1

typedef ×1

visual-c++ ×1