小编Ano*_*ous的帖子

QObject多重继承

我试图在C++/Qt的类中使用mix来提供一大堆具有通用接口的小部件.接口以这样的方式定义,以便如果将其定义为其他窗口小部件类的基类,则窗口小部件本身将具有这些信号.即参考下文.

class SignalInterface: public QObject {
    Q_OBJECT

    public:
    SignalInterface();
    virtual ~SignalInterface();

    signals:
    void iconChanged(QIcon);
    void titleChanged(QString);
}

class Widget1: public SignalInterface, QWidget{

    public:
    Widget1()
    virtual ~Widget1()

    // The Widget Should Inherit the signals
}
Run Code Online (Sandbox Code Playgroud)

看看类层次结构问题变得明显,我偶然发现了多重继承中的可怕钻石,其中Widget1继承自QWidget和SignalInterface,两者都继承自QObject.这会引起任何问题吗?

我们知道,如果QObject类是纯虚拟的,那么这个问题很容易解决(事实并非如此).

一个可能的解决方案是

class Interface: public QWidget {
Q_OBJECT

signals:
void IconChanged(QIcon);
void titleChanged(QString);
}

class Widget1: public Interface {

}
Run Code Online (Sandbox Code Playgroud)

这里的问题是我已经拥有了许多从QWidget继承的代码,并且很难将其破解.还有其他方法吗?

c++ user-interface qt

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

Windows Qt与MinGw或Visual Studios?

我正在尝试编译qt,并且面对两种选择是使用MinGw还是Visual Studio编译器?它们之间有什么区别,使用其中一个有什么优点/缺点吗?

windows compiler-construction qt

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

我可以在定义中使用三元运算符来反对使用if吗?

假设我定义了一个宏,并且我在if else语句中使用该宏

#include <iostream>

#define LOG(x) {if (x) std::cout << "What is up" << std::endl;}

int main(void) {
  if (true)
    LOG(true);
  else
    false;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在这是一个棘手的案例,我意识到,根据缩进,可能会有一些含糊不清的关于'如果'应该使用'其他'.

我想出了这个灵魂

(some_condition) ? dosomething() : true;
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题,但我不确定有真正陈述的后果是什么.这是一个很好的解决方案,还是有更好的方法?

编辑:这是我使用的代码,它不起作用.看看你能解决这个问题吗?

c c++ syntax

9
推荐指数
2
解决办法
2681
查看次数

在 Bash 中的函数内部使用声明

我想使用函数更改全局变量(或至少附加到它)。

input="Hello"
example=input    

func() {
    declare -x $example="${input} World"
}

func
echo $input
Run Code Online (Sandbox Code Playgroud)

其输出将是“Hello”的原始值。如果该函数能够更改原始值,我希望它。有没有其他方法可以完成此任务。请注意,我需要设置example=input然后执行示例(变量)的操作。

顺便说一句,如果我改用eval该函数,它会抱怨 World 是一个函数或其他东西。

bash shell global-variables

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

在Open GL中计算曲面的法线

我正在尝试为地形生成器添加阴影/光照.但由于某些原因,即使在我计算表面法线之后,我的输出仍然看起来很块.

set<pair<int,int> >::const_iterator it;

for ( it = mRandomPoints.begin(); it != mRandomPoints.end(); ++it )
{
    for ( int i = 0; i < GetXSize(); ++i )
    {
        for ( int j = 0; j < GetZSize(); ++j )
        {
            float pd = sqrt(pow((*it).first - i,2) + pow((*it).second - j,2))*2 / mCircleSize;
            if(fabs(pd) <= 1.0)
            {
                mMap[i][j][2] += mCircleHeight/2 + cos(pd*3.14)*mCircleHeight/2; ;
            }

        }
    }
}

/*
    The three points being considered to compute normals are 
    (i,j)
    (i+1,j)
    (i, j+1)
*/ …
Run Code Online (Sandbox Code Playgroud)

c++ opengl graphics

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

使用运算符大小初始化数组?

我有一个想要初始化的数组

char arr[sizeof(int)];
Run Code Online (Sandbox Code Playgroud)

该表达式的计算结果是否为编译时常量或导致函数调用?

c c++ syntax sizeof

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

如何提取":"之间包含的部分行?

我使用sed解析这个特定的行时遇到问题:

/media/file/1.bmp app:Stuff I want:
Run Code Online (Sandbox Code Playgroud)

基本上我想在两个冒号(::)之间得到东西,即Stuff I want在这种情况下.

我试过了

sed -r 's/.*app:([\s\w\d]*):.*/\1/'
Run Code Online (Sandbox Code Playgroud)

这没用.

regex bash sed

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

将结构数组分配给typedef结构

如何分配具有类似结构typedef struct的另一个数组struct.

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int age;
    int height;
} Person[3];

struct internalStruct {
    int age;
    int height;
};

int main(void) {

    //Possible
    Person bob = {{7,5},{4,2},{4,3}};

    //Is it possible to assign array to struct?
    struct internalStruct intr[3] = {{4,32},{2,4},{2,4}};
    Person job = intr; // Does not work :(. 
    printf("%d", jon[0].height);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

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

一个没有 Android 项目的 Android NDK 库如何

我希望能够使用 android ndk-build 脚本构建一个共享库,但由于某种原因,我收到了一堆错误:

# I have Application.mk and Android.mk in the current folder
ndk-build -C . 
Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.  
Run Code Online (Sandbox Code Playgroud)

有没有办法只用源文件和头文件来构建Android共享库?$$\int$$

android build android-ndk

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

单身人士或信号和老虎机?

我试图重新实现或修改gui应用程序中的选项卡代码.他们目前正在使用Qt信号和插槽系统来处理标签栏中标签的添加和删除(例如,如果标签正从一个标签窗口小部件拖动到另一个标签窗口小部件,旧标签窗口小部件将向新标签窗口小部件发出新标签信号来了).我在思考而不是使用它,我可以使用线程安全的单例类来简化事情.然后,当移动标签时,小部件只调用单例而不是发出信号.

谢谢

c++ user-interface qt

0
推荐指数
1
解决办法
649
查看次数

如何使用Perl脚本将little Endian转换为Big Endian?

我正在使用Perl Win32::SerialPort模块.在这个特殊模块中,我使用输入命令发送数据.我发送到嵌入式系统的数据是使用该transmit_char函数的标量数据(数字)(如果它是C它将是整数,但由于它是一种脚本语言,我不知道perl中的内部格式是什么.我的猜测是perl总是将所有数字存储为32位浮点,这些浮点在发送时由模块调整).

然后在发送数据后,我使用输入命令接收数据.我收到的数据可能是二进制形式,但perl不知道如何解释它.我使用这样的unpack功能

my $binData = $PortObj->input;
my $hexData = unpack("H*",$binData);
Run Code Online (Sandbox Code Playgroud)

假设我0x4294通过串行电缆传输,这是我正在与之通信的嵌入式系统上的一个命令,我希望得到一个响应 0x5245.现在问题在于endianess:当我解压缩时,我得到了0x4552,这是错误的.有没有办法通过调整二进制数据来纠正它.我也试过h*,这给了我0x5425,这也是不对的.

注意:我收到的数据一次通过字节发送,LSB首先发送

perl endianness

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