小编Dmi*_*try的帖子

QML:Component vs Item作为容器

ComponentItemQML有什么区别?这里的文档并不完全清楚.用作多个小部件的容器的首选类型是什么?可以替换Rectangle吗?

例如,以下声明的区别是什么:

Item {
    id: itemWidget

    Rectangle { id: one }
    Rectangle { id: two }
}
Run Code Online (Sandbox Code Playgroud)

Component {
    id: componentWidget

    Rectangle { id: one }
    Rectangle { id: two }
}
Run Code Online (Sandbox Code Playgroud)

为什么我们通常Component在宣布时使用delegate

qt delegates qml qtquick2 qqmlcomponent

21
推荐指数
2
解决办法
6582
查看次数

Cmake:基于变量内容的 add_custom_command 参数

我想要一个 Cmake 函数来将一些二进制文件复制到特定位置。为此,我有以下函数定义:

function ( collect_binaries TARGET_NAME DEST_DIR )
   set ( targetsToCopy ${ARGN} )

   set ( copy_cmd "COMMAND ${CMAKE_COMMAND} -E make_directory ${DEST_DIR}\n" )

   foreach ( target ${targetsToCopy} )
      LIST( APPEND copy_cmd "COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> ${DEST_DIR}$<TARGET_FILE_NAME:${target}>\n")
   endforeach( target ${targetsToCopy} )

   #message( FATAL_ERROR ${copy_cmd} )
   add_custom_target( ${TARGET_NAME} )
   add_custom_command( TARGET ${TARGET_NAME} PRE_BUILD ${copy_cmd} )

endfunction( collect_binaries )
Run Code Online (Sandbox Code Playgroud)

以及以下用法:

collect_binaries( bin_copy ${PROJECT_BINARY_DIR}/out/ target_1 target_2 target3 )
Run Code Online (Sandbox Code Playgroud)

我在项目树中定义了 target_1、target_2 和 target_3。考虑到这一点,我得到了以下 Cmake 配置输出:

binary_copy.cmake:15 (add_custom_command) 处的 CMake 警告 (dev):

策略 CMP0040 未设置:add_custom_command() …

cmake

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

C++:std::visit 不能在 gcc 下编译

这是我的代码,它对 clang 编译得很好,但在 gcc 时失败了

#include <iostream>
#include <string>
#include <regex>
#include <variant>

struct Id {
    void SetValue(const std::string& item)
    {
        value = item;
    }

    std::string value;
};

struct Number {
    void SetValue(const std::string& item)
    {
        value = std::stoi(item);
    }
    int value;
};


using TokenBase
    = std::variant<Number, Id>;

struct Token : TokenBase {
    using TokenBase::TokenBase;

    template <typename T>
    [[nodiscard]] bool Is() const {
        return std::holds_alternative<T>(*this);
    }

    template <typename T>
    [[nodiscard]] const T& As() const {
        return std::get<T>(*this);
    }

    template <typename …
Run Code Online (Sandbox Code Playgroud)

c++ gcc std variant

7
推荐指数
1
解决办法
297
查看次数

cmake : 指定linux内核模块输出构建目录

这是我的 cmake 来构建 linux 内核 hello world 模块。

if ( UNIX )
    # Version number
    set ( DRV_MAJOR 1 )
    set ( DRV_MINOR 0 )
    set ( DRV_PATCH 0 )

    set ( DRV_VERSION ${DRV_MAJOR}.${DRV_MINOR}.${DRV_PATCH} )

    configure_file( drv_config.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/drv_config.h )
    execute_process(COMMAND uname -r
                    OUTPUT_VARIABLE os_version
                    OUTPUT_STRIP_TRAILING_WHITESPACE)

    set(module_path /lib/modules/${os_version})
    set(module_build_path ${module_path}/build)

    add_custom_command(OUTPUT drv.ko
                       COMMAND ${CMAKE_MAKE_PROGRAM} -C ${module_build_path} M=${CMAKE_CURRENT_SOURCE_DIR}
                       DEPENDS driver.c Kbuild
                       COMMENT "Building drv.ko"
                      )

    add_custom_target(drv ALL DEPENDS drv.ko)

endif( UNIX )
Run Code Online (Sandbox Code Playgroud)

还有我的 Kbuild :

obj-m += drv.o
drv-objs := driver.o
Run Code Online (Sandbox Code Playgroud)

如何为所有目标文件和相关内容指定输出目录?目前,构建内容是在源目录位置生成的。而且我不想混合源文件和 …

cmake kbuild

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

c++ std::map&lt;std::string, int&gt; 与std::string_view一起使用

假设我有一个std::map<std::string, int>. 有什么方法可以使用它的at方法std::string_view吗?这是一个代码片段:

std::string_view key{ "a" };
std::map<std::string, int> tmp;
tmp["a"] = 0;
auto result = tmp.at(key);
Run Code Online (Sandbox Code Playgroud)

这是我从 clang 12.0 获得的输出

错误:没有匹配的成员函数来调用“at”

自动结果 = tmp.at(key);

c++

5
推荐指数
1
解决办法
102
查看次数

Cmake:在自定义目录中找到protobuf包

我有 cmake 3.10.x 并下载了当前的 protobuf 源 3.6.1。使用 cmake,我创建了 bin 目录“{PROTOBUF_SOURCE_DIR}/bin”,在该目录中成功构建了该库。作为下一步,我想在我的基于 cmake 的项目中使用这个自定义树。我有

set ( Protobuf_USE_STATIC_LIBS ON )

find_package( Protobuf REQUIRED )
if ( Protobuf_FOUND )
    message( STATUS "Protobuf version : ${Protobuf_VERSION}" )
    message( STATUS "Protobuf include path : ${Protobuf_INCLUDE_DIRS}" )
    message( STATUS "Protobuf libraries : ${Protobuf_LIBRARIES}" )
else()
    message( WARNING "Protobuf package not found -> specify search path via PROTOBUF_ROOT variable")
endif()
Run Code Online (Sandbox Code Playgroud)

但是如何为 cmake 指定我的自定义目录树以找到必要的东西。

如果我使用,find_package( Protobuf REQUIRED PATHS ${PROTOBUF_ROOT}/bin/lib/cmake/protobuf )那么我会看到 cmake 的以下输出:

Protobuf version : 3.6.1
Protobuf …
Run Code Online (Sandbox Code Playgroud)

c++ cmake protocol-buffers

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

C++:将 std::map&lt;std::string, double&gt; 转换为 std::map&lt;std::string_view, double&gt;

假设std::map我的班级中有一个 private std::map<std::string, double>。我怎样才能转化为std::map<std::string_view, double>返回给用户?我想在这里有以下原型

const std::map<std::string_view, double>&
MyClass::GetInternalMap() const;
Run Code Online (Sandbox Code Playgroud)

c++ c++17

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

QML TextInput:inputMask 仅过滤浮点值

我正在使用 QtQuick 1.0,我希望 TextInput 元素带有输入以仅获取数字和“.”。要仅获取数字,我使用以下代码:

TextInput {
    id: textInput

    anchors.centerIn : inputArea
    font.family : "Helvetica"
    font.pixelSize: textSize
    color: "black"
    maximumLength: 5
    smooth: true
    inputMask: "99999"
    readOnly: isReadOnly
}
Run Code Online (Sandbox Code Playgroud)

而且我只能输入数字。我应该如何扩展它以获得“。” 还 ?

qml

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

对全局变量的多线程访问:我应该使用互斥锁吗

假设我有 2 个线程:std::thread thd1; std::thread thd2;线程 thd1 定期设置一些调用以下setFlag函数的全局变量:

static std::int32_t g_flag;
static std::mutex io_mutex;

void setFlag( std::int32_t flag )
{
   //std::lock_guard<std::mutex> lk(io_mutex);
   g_flag = flag;
}
Run Code Online (Sandbox Code Playgroud)

线程 thd2 定期读取此标志

std::int32_t getFlag()
{
   //std::lock_guard<std::mutex> lk(io_mutex);
   return g_flag;
}
Run Code Online (Sandbox Code Playgroud)

问题是 - 在这种情况下我应该使用互斥锁吗?在没有互斥锁的情况下从多个线程以读写方式访问变量是否安全?

c++ multithreading

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