小编Kor*_*idu的帖子

强制CMake使用Visual Studio将C++编译器用于C文件

我已生成.h和.c文件,必须使用Visual Studio编译为C++文件.我听说我可以做点什么set_source_files_properties( ${SOURCES} PROPERTIES LANGUAGE "CXX" ).与此同时,我已经读到我不应该这样做,因为它只应该在异国情调中使用.

那么,强制CMake生成将C文件编译为C++文件的VS项目的最佳方法是什么?

PS:重命名生成的文件不是一个选项.

c c++ cmake visual-c++

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

如何获取std :: unordered_map的最后一个元素?

如何获得最后一个元素std::unordered_map

myMap.rbegin()并且--myMap.end()是不可能的.

c++

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

从一个存储库导出SVN目录并提交到另一个存储库

我们有一个SVN存储库,它与我们的所有票证,维基等在线存储.出于部署目的,我们需要使用我们无法控制的第二个SVN存储库:我们不能使用svndump,svnload,svnsync等.我们可以基本上更新和提交.

在部署时,我想从Dev Repo导出工作副本,然后将其提交到Staging + Live repo.请参阅下面的草图,粗略了解我需要做什么.

SVN工作流程

是否有SVN命令正在执行此操作?我可以使用svn export命令但是我必须手动添加所有新文件我相信.另外,我想避免在只有少数更改时导出所有文件.因此,我希望每次要部署站点时都避免重新创建S工作副本.

或者可能有一个更简单的解决方案?

最好的祝福

svn

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

std :: tolower和Visual Studio 2013

我试着理解如何使用std::tolower......

#include <iostream>
#include <string>
#include <algorithm>
#include <locale>

int main()
{
    std::string test = "Hello World";
    std::locale loc;
    for (auto &c : test)
    {
        c = std::tolower(c, loc);
    }

    std::transform(test.begin(), test.end(), test.begin(), ::tolower); // 1) OK
    std::transform(test.begin(), test.end(), test.begin(), std::tolower); // 2) Cryptic compile error
    std::transform(test.begin(), test.end(), test.begin(), static_cast<int(*)(int)>(std::tolower)); // 3) Cryptic compile error. Seems OK with other compilers though

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以:

  1. 为什么::tolower版本有效?
  2. 为什么std::tolower不在std :: transform中工作?
  3. 什么static_cast<int(*)(int)>(std::tolower))真的是想干什么?为什么它适用于GCC而不适用于Visual Studio 2013? …

c++ visual-studio c++11

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

为什么std :: multimap没有[]运算符?

为什么std :: multimap没有[]运算符?

multimap(键类型为std :: string)的错误中,人们说"从中提取元素是没有意义的 - 每个索引都有多个值".对我来说,这是完全合理的,这就是为什么有平等的原因.

那么,为什么他们决定不为multimap添加[]运算符呢?

我觉得这是因为myMultiMap[key] = value处理起来会很复杂,但我真的不确定.

c++ c++11

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

如何使用LFTP保留文件修改时间

我写了一个同时同步多个服务器的脚本.我的一个问题是我无法获得LFTP以保留初始文件修改时间.所以基本上,它总是上传所有文件,而只有一些更改.

你知道如何强制LFTP在下载或上传时保留文件修改时间吗?

谢谢你的帮助.

Korchkidu

ftp

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

GLfloat或GLdouble默认情况下?

在C++中,最好在double默认情况下使用,float或者long double仅在我们确实知道需要它们时使用.但对于OpenGL,我发现这GLfloat似乎是默认的.考虑到双精度现在在最新的GPU上很常见,它仍然是相关的吗?

c++ opengl

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

使用Wacom Bamboo和Qt 5.2进行缩放,平移和旋转

我想从Wacom Bamboo中检索事件,并将它们用于Qt Quick 2应用程序中的缩放,平移和旋转行为.

看一下photosurface示例,看起来他们正在做类似的事情:

  MouseArea
  {
    id: dragArea
    hoverEnabled: true
    anchors.fill: parent

    onWheel:
    {
      if (wheel.modifiers & Qt.ControlModifier)
      {
         ...
      }
      else
      {
         ...
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

但是,轮子事件不能提供足够的信息来确定所执行的手势.而photosurface示例与Wacom Bamboo无法正常工作.

那么,将Wacom设备与Qt Quick 2应用程序集成的正确方法是什么?

如果Qt Quick 2站点上没有解决方案,那么可以将Wacom设备与C++ Qt Widget应用程序集成吗?

附加信息

在此输入图像描述

我得到的事件是(更改值被"<< >>"包围,相对于其他手势的特定值被"== =="包围):

wheel.buttons: 0
wheel.modifiers: == 0 ==
wheel.pixelDelta: QPoint(0, 0)
wheel.angleDelta: QPoint(0, << 21 >>)
wheel.x: 205
wheel.y: 279
Run Code Online (Sandbox Code Playgroud)

这里,垂直和水平平移只有一个值发生了变化.

放大

在此输入图像描述

我得到的事件是(更改值被"<< >>"包围,相对于其他手势的特定值被"== =="包围):

在这里,相同的值正在改变.请注意,捏合手势作为"Ctrl +鼠标滚轮"事件发送

wheel.buttons: 0
wheel.modifiers: == 67108864 ==
wheel.pixelDelta: QPoint(0, 0)
wheel.angleDelta: QPoint(0, << …
Run Code Online (Sandbox Code Playgroud)

c++ qt wacom qml qtquick2

5
推荐指数
0
解决办法
709
查看次数

仿函数成员中的状态数据与全局函数

在比较函数和函子时,经常提到函数函数的一个优点是函数是有状态的.

但是,在这段代码中,在我看来,一个函数也可能是有状态的.那么我在做什么/理解错误?

struct Accumulator
{
  int counter = 0;
  int operator()(int i)
  { 
    counter += i; 
    return counter;
  }
};

int Accumulate(int i)
{
  static int counter = 0;
  counter += i;

  return counter;
};

int main()
{
  Accumulator acc;
  std::vector<int> vec{1,2,3,4};
  Accumulator acc2 = std::for_each(vec.begin(), vec.end(), acc);
  int d1 = acc(0); // 0, acc is passed by value
  int d2 = acc2(0); // 10

  std::for_each(vec.begin(), vec.end(), Accumulate);
  int d4 = Accumulate(0); // 10

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ static functor

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

在QML中使QList <QObject*> C++模型动态化

我有一个QList<QObject*>包含自定义对象并暴露给QML 的C++模型.

我的自定义对象如下所示:

class CustomObject : public QObject
{
  Q_OBJECT

    Q_PROPERTY(QString name READ getName NOTIFY nameChanged)
    Q_PROPERTY(QQmlListProperty<CustomObject READ getChildren NOTIFY childrenChanged)

    [...]

}
Run Code Online (Sandbox Code Playgroud)

我的模型接触到QML,如下所示:

qmlEngine->rootContext()->setContextProperty("internalModel", QVariant::fromValue(m_internalModel));
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我可以使用视图,显示我的所有元素,并递归地显示他们的孩子.

问题是QList无法通知QML模型已更改.如关于基于QObjectList的模型的文档中所述:

注意:视图无法知道QList的内容已更改.如果QList发生变化,则需要通过再次调用QQmlContext :: setContextProperty()来重置模型.

所以每当我添加或删除一个项目时,我都会打电话:

qmlEngine->rootContext()->setContextProperty("internalModel", QVariant::fromValue(m_internalModel));
Run Code Online (Sandbox Code Playgroud)

这非常慢.

如果我理解正确,我需要改为使用QAbstractItemModel.

那么,是不是可以从迁移QList<QObject*>QAbstractItemModel不改变QML一部分?特别是,我应该将所有Q_PROPERTY从CustomObject 迁移到角色还是可以"重用它们"?

c++ qt qml

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

标签 统计

c++ ×8

c++11 ×2

qml ×2

qt ×2

c ×1

cmake ×1

ftp ×1

functor ×1

opengl ×1

qtquick2 ×1

static ×1

svn ×1

visual-c++ ×1

visual-studio ×1

wacom ×1