小编Mat*_*ias的帖子

如何在PyQT小部件中嵌入Python解释器

我希望能够从我的python应用程序中调出一个交互式python终端.我的程序中的一些(但不是全部)变量需要暴露给解释器.

目前我使用子类和修改QPlainTextEdit并将所有"命令"路由到evalexec,并在dict中跟踪单独的命名空间.然而,必须有一个更优雅和健壮的方式!怎么样?

这是一个做我想要的例子,但它是用IPython和pyGTK ... http://ipython.scipy.org/moin/Cookbook/EmbeddingInGTK

以下是我目前的情况.但是有太多的角落案例我可能错过了一些.这是非常慢,尝试一个大的打印循环...它必须是一个更简单,更少漏洞的方式,...我希望!

这个def runCommand(self)功能是理解我的问题的关键.理想情况下,我不想改进它,我宁愿用更简单,更聪明的东西来替换它的内容.

console.updateNamespace({'myVar1' : app, 'myVar2' : 1234})"main"中语句的功能也很重要.

import sys, os
import traceback
from PyQt4 import QtCore
from PyQt4 import QtGui

class Console(QtGui.QPlainTextEdit):
    def __init__(self, prompt='$> ', startup_message='', parent=None):
        QtGui.QPlainTextEdit.__init__(self, parent)
        self.prompt = prompt
        self.history = []
        self.namespace = {}
        self.construct = []

        self.setGeometry(50, 75, 600, 400)
        self.setWordWrapMode(QtGui.QTextOption.WrapAnywhere)
        self.setUndoRedoEnabled(False)
        self.document().setDefaultFont(QtGui.QFont("monospace", 10, QtGui.QFont.Normal))
        self.showMessage(startup_message)

    def updateNamespace(self, namespace):
        self.namespace.update(namespace)

    def showMessage(self, message):
        self.appendPlainText(message)
        self.newPrompt()

    def newPrompt(self):
        if …
Run Code Online (Sandbox Code Playgroud)

python embed pyqt ipython

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

- 用于MS Visual Studio C++编译器的系统

我通常喜欢在编程时启用很多警告.但是,某些库包含容易导致警告的代码(..,python,Qt,..).使用gcc编译时,我可以使用-isystem而不是-I来静音.我怎么能用MS编译器做同样的事情?我知道警告#pragma,但我想要一个不涉及编译器特定代码的解决方案.我也知道我可以关闭特定的警告,但这不是我想要的.

BTW:isystem应该是这个问题的标签,但我不被允许这样做..

摘要:我希望从代码中看到所有警告,并且没有来自外部代码的警告.

gcc warnings static-analysis clang visual-studio

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

在移动施工过程中,从物体移动的基本型成员的价值可以说什么?

考虑这段代码

Foo f1;
Foo f2{ std::move(f1) };
Run Code Online (Sandbox Code Playgroud)

我希望成员值f1不再必须保持默认构造函数给出的值.但是,使用此实现进行多个编译器的测试Foo表明不然.

class Foo
{
public:
    Foo() = default;
    Foo(Foo &&) = default;

    std::string s{ "foo" };
    bool t{ true };
    bool f{ false };
};
Run Code Online (Sandbox Code Playgroud)

移动f1.t总是true并且f1.f永远是false.正如在这个问题中所描述的那样,我希望这些值要么是不确定的,要么两个布尔值都具有相同的值.但是,它们似乎获得了与默认构造函数相同的值.

GCC的实例

这只是我的编译器的实现细节(巧合相同)还是在标准中?

c++ language-lawyer move-semantics c++11

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

从C++模板参数包编译时间数组

我怎样才能在编译时从模板参数包中创建一个std :: array?

这显示了我需要的东西,但没有参数包.

template<typename T1, typename T2, typename T3>
struct ToInfoArray
{
    static constexpr std::array<Info, 3> value = { { T1::info, T2::info, T3::info } };
};
Run Code Online (Sandbox Code Playgroud)

现场演示演示预期用途

奖金问题: 您会使用std::array,array[]还是std::initializer_listInfoArray的类型?

c++ templates stl variadic-templates c++11

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

来自mime类型的QFileDialog过滤器

我希望QFileDialog中的过滤器匹配所讨论的平台上Phonon支持的所有音频文件类型.

1 - 但是我无法在Qt中找到在过滤器中使用mime类型的方法.我怎样才能做到这一点?

2 - 或者我如何手动找到mimetypes的相应文件扩展名?解决方案应该是基于Qt的,或者至少是跨平台的,并且在任何地方都支持Qt.

选项一是我的首选解决方案,但选项二也可以.

以下是描述我的问题的简短代码:

#include <QApplication>
#include <QFileDialog>
#include <QStringList>
#include <phonon/backendcapabilities.h>

QStringList mime_to_exts(QString mime)
{
   // WHAT TO REALLY DO ??
   // NEEDLESS TO SAY; THIS IS WRONG...
   return QStringList(mime.split("/").back().split('-').back());
}

int main(int argc, char **argv)
{
   QApplication app(argc, argv);
   app.setApplicationName("phononext");

   QStringList p_audio_exts;
   QStringList p_mime_types = Phonon::BackendCapabilities::availableMimeTypes();
   for(QStringList::iterator i = p_mime_types.begin(), ie = p_mime_types.end(); i != ie; i++)
   {
      if((*i).startsWith("audio"))
         p_audio_exts << mime_to_exts(*i);
   }

   QString filter = QString("All Files(*)");
   if(!p_audio_exts.isEmpty())
   {
      QString p_audio_filter = …
Run Code Online (Sandbox Code Playgroud)

qt file-extension phonon qfiledialog mime-types

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

类型安全的模板c ++ 11枚举类标志

我试图使用模板创建类型安全的C++标志.我也想区分一个标志和标志小号(是零,一个或多个标志).

下面的解决方案运行良好,除非EnumFlag<T> operator | (T, T)导致|枚举上的所有操作返回类型EnumFlag.这打破了很多代码.有什么技巧可以解决这个问题?在我的代码中,我执行以下操作,但是Option这里的硬编码不是一个选项.如何使这个通用?

EnumFlag<typename std::enable_if<std::is_same<T, Option>::value, T>::type> operator | (T l, T r)
Run Code Online (Sandbox Code Playgroud)

将此更改为......

EnumFlag<T> operator | (T l, T r)
Run Code Online (Sandbox Code Playgroud)

...的原因打破了一切.我想要这样的东西(不是compilabel代码).或者任何其他更好的主意!

EnumFlag<typename std::enable_if<std::already_expanded<EnumFlag<T>>::value, T>::type> operator | (T l, T r)
Run Code Online (Sandbox Code Playgroud)

完整的可编辑代码:

EnumFlag.h

#ifndef __classwith_flags_h_
#define __classwith_flags_h_

#include <type_traits>

enum class Option
{
    PrintHi = 1 << 0,
    PrintYo = 1 << 1,
    PrintAlot = 1 << 2
};

template <typename T>
class EnumFlag
{ …
Run Code Online (Sandbox Code Playgroud)

c++ enums templates type-safety c++11

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

如何静默来自 GCC 的 #pragma 消息

#pragma message我对看到我的构建不感兴趣。它只会使输出变得混乱。

我顺便把这件事告诉了 Clang -Wno-#pragma-messages。但是,GCC 不理解该标志,并且我找不到任何类似的标志。

我如何要求 GCC 忽略#pragma message

c++ gcc pragma clang suppress-warnings

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

使用Python创建损坏的符号链接

使用Python我想创建一个指向不存在的路径的符号链接.然而os.symlink只是抱怨"OSError:[Errno 2]没有这样的文件或目录:"..这可以很容易地用ln程序完成,但是如何在不调用Python的ln程序的情况下在Python中完成它?

编辑: 不知怎的,我真的搞砸了这个:/ ...下面的两个答案都是正确的

python symlink ln

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

如何在不破坏移动和复制构造函数的情况下声明虚拟析构函数

将用户定义的默认虚拟析构函数添加到这样的类时..

class Foo
{
public:
    Foo();
    virtual ~Foo() = default;
};
Run Code Online (Sandbox Code Playgroud)

.. 它具有防止自动生成移动构造函数的副作用。也不推荐自动生成复制构造函数。推荐的方法是用户像这样定义所有构造函数..

class Foo
{
public:
  Foo();
  virtual ~Foo() = default;
  Foo(const Foo& /* other */) = default;
  Foo&operator=(const Foo& /* other */) = default;
  Foo(Foo&& /* other */) = default;
  Foo&operator=(Foo&& /* other */) = default;
};
Run Code Online (Sandbox Code Playgroud)

然而,这是非常冗长和不可读的。有没有其他解决方案?

c++ virtual-destructor c++11

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