小编p.i*_*.g.的帖子

使用str(const char*)设置std :: stringstream的内容会产生奇怪的后果

std::stringstream广泛使用它来生成代码.当使用str()函数设置内容然后使用时,我遇到了一些奇怪的行为operator<<.有人可以向我解释这种行为.我非常感谢 - 谢谢.

示例一:

std::stringstream ssa;
ssa.str("Setting string");
std::cout << ssa.str() << std::endl;
ssa << " adding to string";
std::cout << ssa.str() << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

设置字符串

添加到字符串

预期:

设置字符串

设置字符串添加到字符串

因此,在对文档进行一些阅读之后,我发现我应该将打开模式设置为ios_base::ate:

std::stringstream ssb(std::ios_base::ate);
ssb.str("Setting string");
std::cout << ssb.str() << std::endl;
ssb << " adding to string";
std::cout << ssb.str() << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

设置字符串

设置字符串

再次(或现在)我期望:

设置字符串

设置字符串添加到字符串

为什么我会得到我的结果,我如何得到我想要的结果?Ei能够设置a的初始stringstringstream和附加值string吗?

我知道我可以将内容设置为空string(""),然后只使用<<operator.这实际上是我正在使用的解决方法.我只是不明白观察到的行为.解决方法使我的代码更加混乱.

c++ stringstream c++11

19
推荐指数
2
解决办法
2048
查看次数

为什么使用std :: make_*而不是构造函数更好?

有些情况下,与启动STL一些功能make_前缀一样std::make_pair,std::make_shared,std::make_unique等它为什么一个更好的做法是使用它们,而不是简单地使用构造?

auto pair2 = std::pair< int, double >( 1, 2.0 );
auto pair3 = std::make_pair( 1, 2.0 );

std::shared_ptr< int > pointer1 = std::shared_ptr< int >( new int( 10 ) );
std::shared_ptr< int > pointer2 = std::make_shared< int >( 10 );
Run Code Online (Sandbox Code Playgroud)
  • 我只是看到这些函数使代码变得更短,但这就是全部吗?
  • 还有其他优点吗?
  • 这些功能更安全吗?

c++ std c++11

19
推荐指数
2
解决办法
1902
查看次数

Qt5双量程滑块

网上有很多关于尝试制作双范围滑块的帖子在此输入图像描述

我找到的最常见的答案是使用libqxt.然而,进入网站 它清楚地表明,由于新版本的内部api更改,它没有维护Qt.

是否Qt5为此提供了任何新功能,或者是否有更持久的Qt实现提供此功能而无需大型外部库?

qt qt-designer qt5

13
推荐指数
2
解决办法
5486
查看次数

转发声明枚举类不起作用

在State.h我有

enum class StateID : unsigned int;
Run Code Online (Sandbox Code Playgroud)

在State.cpp我有

enum class StateID : unsigned int
{
    NullID = 0,
    MainMenuID,
    GamePlayID,
};
Run Code Online (Sandbox Code Playgroud)

问题是任何包含的类State.h都有前向声明,但我不能enum在任何cpp文件中使用任何值,除了States.cpp(定义它),比如StateID::MainMenuID.错误说......

/home/lee/Projects/SuddenAwakening/Source/Game.cpp:24:错误:'MainMenuID'不是'StateID'的成员

我正在运行LinuxMint15KDE,g ++ 4.7,我在其他部分使用c ++ 11功能,如nullptr,unique_ptr,ect ......,所以我不会忘记c ++ 11的编译器标志.

c++ forward-declaration c++11 enum-class

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

QJSonArray进行QString转换

我有这两个变量,我想将数据转换为dataToString.

QJSonArray data;

Qstring dataToString;
Run Code Online (Sandbox Code Playgroud)

在数据中有一个巨大的json像:

{
    "properties": [
        {
            "version":"1",
            "finish":"0",
            "num":3,
            "running":false,
            "time":"00:20:00",
            "player1":"John",
            "player2":"",
            "player3": "Peter",
            "player4":"",
            "team1":"",
            "team2":"",
            "tournament":"",
            "lap":""
        }
    ],
    "game": [
        {
            "serve":true,
            "score":"32",
            "data":"0"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做 ?谢谢.

c++ qstring qt5

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

C++ Qt信号和插槽没有触发

我的Qt程序很难将按钮信号连接到我的插槽.我的代码是:

Main.cpp的

#include <QtGui/QApplication>
#include "MainWidget.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MainWidget mainWidget;
    mainWidget.show();

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

MainWidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>

class MainWidget : public QWidget
{
public:
    MainWidget();

public slots:
    void bAdvice_clicked();
    void bWeather_clicked();
    void bNextMeeting_clicked();
    void bQuit_clicked();
};

#endif // MAINWIDGET_H
Run Code Online (Sandbox Code Playgroud)

MainWidget.cpp

#include "MainWidget.h"
#include <QMessageBox>
#include <QPushButton>
#include <QTextEdit>
#include <QVBoxLayout>

MainWidget::MainWidget()
{
    QLayout *layout = new QVBoxLayout();
    this->setLayout(layout);

    QTextEdit *message = new QTextEdit();
    layout->addWidget(message);

    QPushButton *bAdvice = new QPushButton("Advice"); …
Run Code Online (Sandbox Code Playgroud)

c++ qt qt-signals

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

matlab图中的colormap/datatip问题

我运行这段代码

A = uint8( ones( 200 ) );
a = [ A * 0 A * 1; ...
      A * 2 A * 3 ];

color_map = [ 0    0    0; ...
              0.3  0.3  0.3; ...
              0.9  0.3  0.1; ...
              1    1    1; ...
              zeros( 252, 3 ) ];

h = image( a );
colormap( color_map );
Run Code Online (Sandbox Code Playgroud)

然后,我使用datatip功能选择图中的一个点.这使得图中的颜色发生变化.它们仍然具有相同的索引和RBG值,但它们是不同的颜色.然后,我删除了数据提示,颜色恢复到正确的颜色.

使用,

set(gcf, 'Renderer', 'opengl')
Run Code Online (Sandbox Code Playgroud)

使问题消失,但我想知道是否有办法避免这样做?我正在使用MATLAB R2013b.

matlab matlab-figure

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

如何从lambda函数返回nullptr?

我有一个小的lambda函数,它将找到并返回一个QTreeWidgetItem.但如果它没有找到给定的项目,那么它将返回一个nullptr.但如果我尝试编译它然后它给我一个错误.

功能:

auto takeTopLevelItem = []( QTreeWidget* aTreeWidget, const QString& aText )
{
    const int count = aTreeWidget->topLevelItemCount();
    for ( int index = 0; index < count; ++index )
    {
        auto item = aTreeWidget->topLevelItem( index );
        if ( item->text( 0 ) == aText )
        {
            return aTreeWidget->takeTopLevelItem( index );
        }
    }
    return nullptr; // This causes a compilation error.
};
Run Code Online (Sandbox Code Playgroud)

错误:

错误1错误C3487:'nullptr':lambda中的所有返回表达式必须具有相同的类型:以前它是'QTreeWidgetItem*'cpp 251

我用这个改变了提到的行,现在它编译:

return (QTreeWidgetItem*)( nullptr );
Run Code Online (Sandbox Code Playgroud)

但我想避免这种语法.我怎么解决这个问题?

我用Visual Studio 2012.

lambda c++11

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

使用rapidjson迭代并检索JSON中的嵌套对象

我正在解析一个JSON类似如下的结构

{
    "item1" : "value1"
    "item2" : "value2"
    // ...
    "itemn" : {
        "outernestedItem1" : {
            "innerNestedItem1" : "valuen1"
            "innerNestedItem2" : "valuen2"
        }
        // ....
        "outernestedItemn" : {
            "innerNestedItem1" : "valuen1"
            "innerNestedItem2" : "valuen2"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

外部嵌套项的数量不固定,所以我使用来自rapidjson的迭代器进行迭代,内部嵌套对象变量是固定的,所以我可以使用[]来访问它们.

const rapidjson::Value& itemn = document["itemn"];
for (rapidjson::Value::ConstMemberIterator itr = itemn.MemberBegin();
itr != itemn.MemberEnd(); ++itr)
{
    rapidjson::StringBuffer sb;
    rapidjson::Writer<rapidjson::StringBuffer> writer( sb );
    itr->value.Accept(writer);

    std::cout << sb["innerNestedItem1"].GetString();
    std::cout << sb["innerNestedItem2"].GetString();
}
Run Code Online (Sandbox Code Playgroud)

但是sb(字符串缓冲区)不允许[],任何想法我怎么能这样做?

编辑1:我以非常低效的方式做到了,但只是共享解决方案,所以它可能有助于某人提出有效的解决方案.

const rapidjson::Value& itemn = document["itemn"];
for (rapidjson::Value::ConstMemberIterator itr = …
Run Code Online (Sandbox Code Playgroud)

c++ json rapidjson

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

如何使clang-format跳过c ++代码段

有没有办法配置clang-format工具跳过我的Qt::connect函数调用?我的构造函数中有几个连接看起来像这样:

connect( m_Job, SIGNAL( error( const QString&, const QString& ) ),  this, SLOT( onError( const QString&, const QString& ) ) );
connect( m_Job, SIGNAL( message( const QString& ) ),                this, SLOT( onMessage( const QString& ) ) );
connect( m_Job, SIGNAL( progress( int, int ) ),                     this, SLOT( onProgress( int, int ) ) );
Run Code Online (Sandbox Code Playgroud)

但是在我运行格式化工具后,它会降低可读性:

connect( m_Job, SIGNAL( error(const QString&, const QString&)), this, SLOT( onError(const QString&, const QString&)) );
connect( m_Job, SIGNAL( message(const QString&)), this, SLOT( onMessage(const …
Run Code Online (Sandbox Code Playgroud)

c++ qt clang-format

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