小编Nic*_*aus的帖子

为什么在c ++ 17中不推荐使用std :: allocator的构造和销毁函数?

c ++ 17规范不赞成使用对象constructdestroy成员std::allocator.用于弃用其他成员函数工作组提供的基本原理这里,标题下的"弃用的std ::分配器的所述冗余成员".

但是,他们没有具体提到为什么这两个成员被弃用或者建议取代该功能的原因.我假设暗示是用来std::allocator_traits::construct代替.

我有点困惑的construct是,在某些情况下实施是否仍然是必要的,尽管因为这个评论std::allocator_traits::construct

因为此函数提供自动回退到placement new,所以成员函数construct()是自C++ 11以来的可选Allocator要求.

对于自定义分配器(例如,对于页面对齐的内存使用memalign),回退到放置new总会产生正确的行为吗?

c++ memory-management allocator language-lawyer c++17

43
推荐指数
2
解决办法
4354
查看次数

在编译时确定最不常见的祖先

关于最不常见的祖先算法有很多问题,但是这个问题是不同的,因为我试图在编译时确定LCA,而我的树既不是二进制也不是搜索树,即使我的简化版本可能看起来像一.

假设你有一堆包含成员typedef的结构parent,这是另一个类似的结构:

struct G
{
    typedef G parent;    // 'root' node has itself as parent
};

struct F
{
    typedef G parent;
};

struct E
{
    typedef G parent;
};

struct D
{
    typedef F parent;
};

struct C
{
     typedef F parent;
};

struct B
{
    typedef E parent;
};

struct A
{
     typedef E parent;
};
Run Code Online (Sandbox Code Playgroud)

它们共同组成了一棵树

A    B    C    D
 \  /      \  /
  E         F
   \       /
    \ …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm least-common-ancestor template-meta-programming c++14

19
推荐指数
3
解决办法
561
查看次数

如何在不存储连接的情况下断开lambda函数

有没有办法断开Qt对lambda函数的连接而不存储连接对象?

我知道如果我存储QMetaObject::Connection从connect函数返回的内容是可能的,但我真的不想这样做,因为会有很多它们.我主要连接到lambda函数,以避免创建一堆一次性方法和对象,似乎我需要做所有SLOTs更优选的簿记.

c++ lambda qt c++11

12
推荐指数
3
解决办法
4475
查看次数

QObject :: connect函数中的QObject*上下文

我读了QObject :: connect 的文档(对于Qt 5.4),但我有一个关于重载的问题

QMetaObject::Connection QObject::connect(const QObject * sender, PointerToMemberFunction signal, const QObject * context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)

context参数究竟是什么?它的目的是什么?它可以用于在线程中的本地事件循环中构建连接吗?

有人可以提供如何/何时使用此重载的示例(当上下文不是时this)?

c++ qt c++11

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

QTableView列宽

我正在努力手动设置列宽QTableView.为什么这段代码不起作用?

tabb = new QTableView;
tabb->resizeColumnsToContents();

for (int col=0; col<20; col++) 
{
   tabb->setColumnWidth(col,80);
}
Run Code Online (Sandbox Code Playgroud)

如果我省略tabb->resizeColumnsToContents();它仍然不起作用.

c++ qt qtableview

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

抑制警告"未在main()线程中创建QApplication"

我已经创建了一个基于Qt的网络库,用于没有运行Qt事件循环的应用程序,而且不一定是Qt应用程序.这是通过QCoreApplication在每个答案的线程中创建一个实例来实现的.是否可以在不调用QApplication :: exec()的情况下创建本地事件循环?

这很好用,但它让Qt不高兴(我认为我担心我会尝试在主线程之外操作一个不起作用的GUI,但我不是),所以它会打印一个警告:WARNING: QApplication was not created in main() thread.

我想要压制那些否则将被打印到X11控制台的警告,并且最有可能导致我的用户输入一堆不必要的缺陷.但是,我只想压制这个错误,因为我qDebug出于某些合法目的使用并希望看到未来的警告.有没有办法做到这一点,就像某种Qt #pragma

编辑:

在此之前提出了类似的问题:Qt控制台应用程序"警告:QApplication不是在main()线程中创建的",但答案基本上只是一个代码审查,没有任何有意义的想法来抑制警告.

c++ qt suppress-warnings qcoreapplication

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

使用CMake构建外部项目时,jobserver不可用

我正在尝试用Linux上的CMake构建一些外部项目ExternalProject_add.但是,他们不尊重make -j12命令,并发出警告:

‘warning: jobserver unavailable: using -j1. Add `+' to parent make rule.’
Run Code Online (Sandbox Code Playgroud)

这会让我的构建变得痛苦.有没有办法并行构建外部项目?这是一个示例项目:

include(ExternalProject)
    ExternalProject_Add(
        ${TARGET_NAME}-ext
        URL ${CMAKE_CURRENT_SOURCE_DIR}/xerces-c-${VERSION_XERCESC}.tar.gz
        DOWNLOAD_DIR ${XERCESC_DIR}
        SOURCE_DIR ${XERCESC_DIR}/src
        PATCH_COMMAND chmod guo+rw ${CMAKE_CURRENT_SOURCE_DIR} -R
        CONFIGURE_COMMAND ./configure --prefix=${XERCESC_DIR} --disable-shared -q --disable-network --enable-transcoder-gnuiconv --enable-msgloader-inmemory
        BUILD_COMMAND make --silent
        INSTALL_COMMAND make install
        BUILD_IN_SOURCE 1
    )
Run Code Online (Sandbox Code Playgroud)

c++ makefile cmake

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

是否可以在不调用QApplication :: exec()的情况下创建本地事件循环?

我想创建一个基于其构建的库,QTcpServerQTcpSocket用于在其main函数中没有事件循环的程序中(因为Qt事件循环是阻塞的,并且不能为所需的实时操作提供足够的时序分辨率).

我希望通过在类中创建本地事件循环来解决这个问题,但除非我app->exec()首先调用main函数,否则它们似乎不起作用.有没有办法创建本地事件循环并允许在线程内进行信号/插槽通信而无需应用程序级事件循环?

我已经看过有没有办法在没有QApplication :: exec()的情况下使用Qt?但答案没有帮助,因为似乎解决方案添加了本地事件循环但不删除应用程序循环.

c++ qt event-loop qeventloop qapplication

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

在KDevelop进行多线编辑?

我想在KDevelop中进行多行编辑,类似于Visual Studio中的列编辑alt,这样我的光标就会延伸到多行,而我按下的每个键同时写入每一行.

这个链接似乎表明Kate有这样的功能,我的理解是Kate是KDevelop的文本编辑引擎.但是,当我ctrl-shft-B用来进入块编辑模式时,光标只出现在块的底部并键入一行.我做错了什么,或者实际上不支持多行编辑?

我目前正在使用4.7.2版

c++ ide kdevelop multiline

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

在Windows 10中不正确地缩放Qt桌面应用程序

我正在为Windows 10编写一个简单的Qt(Widgets)Gui应用程序.我正在使用Qt的5.6.0 beta版本.

我遇到的问题是它根本没有缩放到我的表面笔的屏幕上:

在此输入图像描述

这有点难以分辨,因为SO会缩放图像,但请注意停靠窗口小部件标题栏控制相对于窗口标题栏控件的小小.

来自Qt的这个链接谈到了扩展,但它主要集中在qml/qtQuick和移动应用程序上,而且似乎暗示在桌面QtWidgets应用程序中,QPainter将自动确定正确的缩放,这显然不是.

什么是确保桌面非qml Qt应用程序在高DPI监视器上正确扩展的最佳方法,特别是在Windows 10中?

c++ qt qtwidgets windows-10

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