小编Jér*_*ôme的帖子

朋友类:继承类不是朋友吗?

在C++中,我有一个A类,它是B类的朋友.

我看起来像继承的B类不是A类的朋友.

我这是C++的限制还是我的错误?

这是一个例子.编译时,我收到一行"返回新纪念品"的错误:

纪念品::纪念品:无法访问纪念品中宣布的私人会员.

class Originator;

class Memento
{
  friend class Originator;

  Memento() {};

  int m_Data;

public:
  ~Memento() {};
};

class Originator
{
public:
  virtual Memento* createMemento() = 0;
};

class FooOriginator : public Originator
{
public:
  Memento* createMemento()
  {
    return new Memento; // Impossible to access private member of Memento
  }
};

void main()
{
  FooOriginator MyOriginator;
  MyOriginator.createMemento();

}
Run Code Online (Sandbox Code Playgroud)

我当然可以添加FooOriginator作为Memento的朋友,但是,这意味着我必须添加所有Originator继承的类作为Memento的朋友,这是我想要避免的.

任何的想法 ?

c++ class friend

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

Qt的跨平台安装程序

我正在尝试为小型Qt应用程序找到跨平台安装程序.

看起来最受欢迎(功能强大?)是BitRock Install Builder,但由于安装程序将在学校使用(我是老师),我正在寻找免费/开源解决方案.

我想在Windows,Mac和Linux OS上为一个简单的应用程序生成一个安装程序.

installer qt open-source cross-platform

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

Windows 8的QTimer准确性很高

我在Windows 8.1中使用Qt 5.2.1.

QTimer在Windows 8.1上面临着关于准确性的奇怪行为.

我正在启动一个计时器,它应该每20毫秒超时一次.为了检查这一点,我还使用QTime对象来测量两个滴答之间的经过时间.

如果我以20ms的间隔启动计时器,我测量的有效间隔为30ms.如果我以19ms的间隔启动定时器,我测量的有效间隔为19ms!

这是一个产生问题的小项目:

main.cpp:

#include "mainfrm.h"
#include <QApplication>

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

    MainFrm w(20);
    w.setMinimumSize(400,50);
    w.show();

    MainFrm w2(19);
    w2.setMinimumSize(400,50);
    w2.show();

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

为MainFrm.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QLabel>
#include <QTime>
#include <QTimer>

class MainFrm : public QLabel {
    Q_OBJECT

public:
    explicit MainFrm(int TimerInterval = 20, QWidget *parent = 0);

private:
    QTime m_LastUpdateTime;
    QTimer m_TickTimer;

    unsigned int m_ElapsedSum;
    unsigned int m_TickCount;

private slots:
    void onTick();
};
#endif …
Run Code Online (Sandbox Code Playgroud)

c++ qt timer

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

使用 PowerShell 5 时格式表不显示所有属性

使用PowerShell V4,我可以Format-Table使用通配符显示多个属性,例如:

PS C:\powershell> gci | Format-Table -Property PS*

PSPath                  PSParentPath           PSChildName            PSDrive                PSProvider                      PSIsContainer
------                  ------------           -----------            -------                ----------                      -------------
Microsoft.PowerShell... Microsoft.PowerShel... test1.txt              C                      Microsoft.PowerShel...                  False
Microsoft.PowerShell... Microsoft.PowerShel... test2.txt              C                      Microsoft.PowerShel...                  False
Microsoft.PowerShell... Microsoft.PowerShel... test3.txt              C                      Microsoft.PowerShel...                  False
Run Code Online (Sandbox Code Playgroud)

现在,使用PowerShell V5,我无法使用相同的命令得到相同的结果:

PS C:\powershell> gci | Format-Table -Property PS*

PSPath                                                          PSParentPath                                      
------                                                          ------------                                      
Microsoft.PowerShell.Core\FileSystem::C:\powershell\test1.txt   Microsoft.PowerShell.Co...
Microsoft.PowerShell.Core\FileSystem::C:\powershell\test2.txt   Microsoft.PowerShell.Co...
Microsoft.PowerShell.Core\FileSystem::C:\powershell\test3.txt   Microsoft.PowerShell.Co...
Run Code Online (Sandbox Code Playgroud)

仅显示两个属性。

为什么是新行为?有没有办法将其更改为 V4 的行为?

powershell formatting powershell-5.0

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

查找是否已使用3D坐标的最快方法

使用C++(和Qt),我需要处理大量的3D坐标.

具体来说,当我收到一个3D坐标(由3个双打组成)时,我需要检查列表是否已经处理了这个坐标.如果没有,那么我处理它并将其添加到列表(或容器).

坐标量可能变得非常大,因此我需要将处理过的坐标存储在容器中,以确保检查容器中是否已经包含3D坐标的速度很快.

我正在考虑使用地图地图的地图,存储x坐标,然后是y坐标,然后存储z坐标,但是这使得使用起来非常繁琐,所以我实际上希望有更好的方法来这是我无法想到的.

c++ performance

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

使用Qt Creator和MinGW更改警告级别

我正试图找到一种方法来改变使用Qt Creator(1.3.0)和MinGW开发的项目的警告级别(我相信默认值为3,我想将其更改为4).

可能吗 ?

mingw qt-creator

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

名称空间用法

我正在尝试以正确的(或至少是最好的)方式开始使用命名空间.

我试图做的第一件事是避免放在using namespace xxx;我的文件的开头.相反,我希望using xxx::yyy尽可能在本地.

这是一个小程序,说明了这一点:

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
   using std::cout;
   using std::endl;

   srand(time(0));

   for(int i=0; i<10;++i)
      cout << rand() % 100 << endl;

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

如果我省略了行,using std::cout;或者using std::endl编译器会在我尝试使用cout或时抱怨endl.

但为什么不需要这个srand,rand而且time?我很确定他们在std,因为如果我试着专门倒std::在他们面前,我的代码工作正常.

c++ namespaces std

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

Qt Creator - 如何编写UI?

我刚刚开始使用Qt Creator,我想编写UI.

我的问题是:写它的最佳方式是什么?通过从小部件框拖放或编写代码?

我已经拖了一些小部件,我看到了,并不是所有的建设QWidget一样QIcon,并QMultiLineEdit在小部件盒.如何添加它们?

谢谢!

user-interface qt qt-creator

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

VBA:以编程方式获取Long限制

在VBA中是否有一种方法可以以编程方式获取数值类型的限制(最小值,最大值)(Long例如)?

numeric_limits<long>::min()C++中的东西.

vba

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

Qt应用程序的基本图标

我的问题很简单.

如何添加Windows资源管理器中显示的图标?

不是特定的窗口我希望整个应用程序如命令提示符在图标上有C:\.

有没有办法在不创建文件并将其链接到.pro文件的情况下做到这一点?

我可以在Qt Creator中更改基本图标吗?

如果是这样,怎么样?如果不是我怎么办呢?

谢谢

PS我已经尝试了其他问题,但根本没有问题

icons qt

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