小编Ste*_*nov的帖子

我的抽象类实现了一个接口,但没有实现它的一些方法.我如何编译?

interface ICanvasTool
{
    void Motion(Point newLocation);
    void Tick();
}

abstract class CanvasTool_BaseDraw : ICanvasTool
{
    protected abstract void PaintAt(Point location);

    public override void Motion(Point newLocation)
    {
        // implementation
    }
}

class CanvasTool_Spray : CanvasTool_BaseDraw
{
    protected abstract void PaintAt(Point location)
    {
        // implementation
    }

    public override void Tick()
    {
        // implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

这不编译.我可以添加一个抽象方法"Tick_Implementation"到CanvasTool_BaseDraw,然后实现ICanvasTool.TickCanvasTool_BaseDraw同一个班轮只是调用Tick_Implementation.这是推荐的解决方法吗?

c# oop abstract-class interface

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

任务管理器不同意Process Explorer?

我正试图在我的.NET应用程序中追踪内存泄漏.Windows任务管理器报告内存使用率保持不变,而Process Explorer报告内存使用率正在提高.

在任务管理器中,我正在寻找唯一的内存列,"内存(私有工作集)".在Process Explorer中,我正在查看"Private bytes"列,因为它正在提升,而"Working set"下的值则没有.

现在,当然Process Explorer是正确的,因为在几次分配之后,我的应用程序因内存不足异常而崩溃.问题是,为什么任务管理器误报了应用程序的内存使用情况?不仅如此,它还误报了全局系统的可用内存("性能"选项卡中的图形保持不变).

我的代码不应该被需要,但这是为了完整性.它显示了一个包含大数组的空窗口.当按下任何键时,窗口关闭并打开一个新窗口,并保持一个新阵列.旧窗口已泄露,可能是由于qt4dotnet GUI库中的错误.

using System;
using com.trolltech.qt.gui;

namespace LeakTest
{
    class Test : QWidget
    {
        public byte[] Data = new byte[1000 * 1000 * 100];

        public Test()
        {
            show();
            GC.Collect(); // so measurements are more accurate
        }

        protected override void keyPressEvent(QKeyEvent arg__1)
        {
            disposeLater();
            new Test();
        }

        [STAThread]
        static void Main(string[] args)
        {
            QApplication.initialize(args);

            new Test();

            QApplication.exec();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

操作系统:Windows 7

有趣的说明:当我将"数据"作为2D锯齿状维度数组时[1000 * …

.net windows memory-leaks taskmanager process-explorer

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

如果T是一个类型arg,如何使用Nullable <T>?

class Test<T>
{
    T? obj;
}
Run Code Online (Sandbox Code Playgroud)

错误:

类型'T'必须是非可空值类型才能在泛型类型或方法'System.Nullable'中将其用作参数'T'

我需要保持一个可能为null的类型为T的引用,但是T可以是值类型或引用类型,Nullable<T>如果T是引用类型,则不能有.有解决方案吗

.net generics nullable

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

在VS中,make print-on-breakpoint使用控制台

我在VS 2010中创建了"当命中,打印消息"断点时.它可以工作,但它只输出到VS"输出"窗格.我可以使用我的应用程序的控制台窗口吗?

我试过了:

Debug.Listeners.Add(new ConsoleTraceListener());
Run Code Online (Sandbox Code Playgroud)

以及:

var writer = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(writer);
Run Code Online (Sandbox Code Playgroud)

debugging breakpoints visual-studio-2010 visual-studio

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

Regex exec()循环永远不会在JS中终止

var matches;

while(matches = /./g.exec("abc"))
{
    console.log("hey");
}
Run Code Online (Sandbox Code Playgroud)

这永远不会终止.我希望它在3次循环后终止.

警告:不要在Chrome中运行它,因为无限的日志行会冻结整个系统.在IE中运行它是安全的(它仍会冻结您的网页,但您可以转到位置栏并按Enter键重新加载).

javascript regex infinite-loop

3
推荐指数
2
解决办法
851
查看次数

QML - id 是什么以及它是如何工作的?

考虑这个项目结构:

我的组件.qml:

Item {
    id: innerId
}
Run Code Online (Sandbox Code Playgroud)

用法.qml:

MyComponent {
    id: outerId
}
Run Code Online (Sandbox Code Playgroud)

乍一看,这似乎创建了一个同时具有 2 个不同 id 的单个对象。但这是不可能的,如果id要被视为财产。

在我看来 anid与其说是对象的属性不如说是对象声明的属性。真的吗?

它将解释我如何将对象称为innerIdinMyComponent.qml和 as outerIdin并且Usage.qml在两个地方都是同一个对象。

syntax qt identifier qml semantics

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

为什么我不能在 Qt 中使用 OpenGL ES 3.0?

QSurfaceFormat在窗口上设置了一个,并且该表面格式将“3.0”设置为其 GL 版本号。代码:

static QSurfaceFormat createSurfaceFormat() {
    QSurfaceFormat format;
    format.setSamples(4);
    format.setDepthBufferSize(24);
    format.setStencilBufferSize(8);
    format.setVersion(3, 0);
    return format;
}

int main(int argc, char *argv[]) {
    // ...

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    QWindow* window = (QWindow*) engine.rootObjects().first();
    window->setFormat(::createSurfaceFormat());

    // ...
}
Run Code Online (Sandbox Code Playgroud)

另外,main()我启用 OpenGL ES 模式,如下所示:

QGuiApplication::setAttribute(Qt::AA_UseOpenGLES);
Run Code Online (Sandbox Code Playgroud)

这意味着我正在请求 GL ES 3.0 上下文。

ANGLE 文档(在开头附近的表格中)表示GL ES 3.0 -> D3D 11已实现 API 翻译支持。我的系统支持 D3D 11 根据dxdiag.exe.

但是当我启动包含此 QML 代码的应用程序时......

Text {
    text: OpenGLInfo.majorVersion + "." + OpenGLInfo.minorVersion
} …
Run Code Online (Sandbox Code Playgroud)

qt opengl-es opengl-es-3.0

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

剔除可见区域之外的项目

文档

默认渲染器不执行任何 CPU 端视口裁剪或遮挡检测。如果某些东西不应该是可见的,它就不应该被显示出来。使用Item::visible: false于不应该被绘制的项目。不添加这样的逻辑的主要原因是它增加了额外的成本,这也会损害表现良好的应用程序。

那么有没有一个技巧可以轻松做到这一点,而无需自己实施呢?

请注意,在我的情况下,可见区域之外的项目在那里,因为它们在 a 中ScrollView并且它们没有滚动到。

我想要剔除的原因是为了减少全场景重绘的 CPU 使用率。

qt scroll culling qml qtquick2

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

OpenCL中图像和缓冲区之间有什么区别?

我刚刚开始学习OpenCL,看起来这些图像是Buffers +添加的好东西,比如免费的双线性采样.

这是正确的,还是还有其他差异?

buffer image opencl

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

将标题放在项目的"include"子目录中是否有任何优势?

我注意到,在流行的C++库的源煤渣有独立srcinclude文件夹,包含*.cpp*.h文件水涨船高.这样做有没有优势,而不是简单地将每个.cpp放在与匹配的.h相同的目录中?

c++ project-structure header-files

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