小编Izz*_*zzo的帖子

Qt信号/插槽如何实际耦合到.ui文件中的元素?

我目前正在研究一个Qt项目,并且对信号和插槽机制有点困惑.但我觉得我对QObject和用户界面表单之间的差异有一点了解.

用户界面表单(由.ui文件描述)被馈送到用户界面编译器(uic)并产生相关的头文件.此头文件不仅包含接口信息,而是包含应格式化QObject的实现细节.另一方面,QObject是基础类,其中构建了许多Qt框架.信号和插槽系统完全基于QObject.

在扩展QObject类(或从派生类)时,实际上是在定义一个可以产生信号和槽的对象.要将此对象格式化为您在Qt Designer中设计的用户界面,请创建ui类的实例(通过uic生成的ui标头).您在此类上调用setup方法并将其提供给您正在创建的新QObject.

这一切似乎都有道理.

然而,没有意义的是当你开始实际定义信号时.从Qt Designer开始,我可以选择右键单击并选择"信号".当我选择一个信号时(无论是鼠标点击按钮还是进度条中的更改),它最终会将其添加到我的QObjects信号部分.我的问题是:为什么以及如何?在Qt Creator中,我在Qt Designer(一个为uic生成XML的程序)中的操作到底是如何与我的QObject耦合的?更具体地说,它如何知道将此插槽添加到哪个QObject?

这个问题可能有点不清楚,所以我在这里举一个例子.

比方说,我想创建一种新的交互式显示器.我们称之为'MyScreen'.为了创建这个界面,我可能会有3个文件:'myscreen.h','myscreen.cpp'和'myscreen.ui'.'myscreen.h'负责声明QObjects属性和方法以及信号和槽.'myscreen.cpp'负责定义方法,信号和插槽.'myscreen.ui'可用于创建用于格式化MyScreen实例的用户界面布局.

但由于我之前所说的ui仅用于生成标题,为什么它与'myscreen.cpp'相关联?也就是说,我可以右键单击.ui布局,创建一个新的信号类型,并将该信号类型添加到myscreen.h和myscreen.cpp中.这是怎么发生的?怎么耦合?Qt是否运行使得应该始终存在3个文件(xxx.h,xxx.cpp,xxx.ui)?

所以希望能给你一些我困惑的背景.似乎没有一份写得很好的文件(我至少已经找到),它彻底描述了所有这些项目之间的基本关系.

TLDR - .h和.cpp的信号/插槽如何实际链接到.ui文件中定义的元素?

c++ qt

16
推荐指数
2
解决办法
1664
查看次数

为什么Python中的整数是不可变的?

我理解Python中可变对象和不可变对象之间的区别.我读了许多讨论差异的帖子.但是,我没有读过任何关于WHY整数是不可变对象的内容.

这有什么原因吗?或者答案是"它就是这样"?

编辑:我被提示将此问题与其他问题"区分",因为它似乎是一个先前提出的问题.但是,我相信我所要求的更多的是一个哲学上的Python问题,而不是一个技术性的Python问题.

似乎Python中的"原始"对象(即字符串,布尔值,数字等)是不可变的.我还注意到由基元(即dicts,列表,类)组成的派生数据类型是可变的.

无论对象是否可变,是否绘制线的位置?原始vs派生?

python mutable immutability

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

Django中STATIC_URL和STATIC_ROOT之间有什么区别?

我对Django 'staticfiles'应用程序中STATIC_URL和STATIC_ROOT之间的区别感到困惑.

我相信我理解STATIC_ROOT它是什么:它本质上是服务器上的位置,staticfiles' collectstatic命令将放置从django项目收集的静态文件.该collectstatic命令将搜索您在STATIC_FINDERS设置中指定的位置.

但是,究竟做了STATIC_URL什么呢?这应该是什么?显然,它旨在设置一些用户可以访问静态文件的东西.但这与它的关系是什么STATIC_ROOT

为什么STATIC_URL简单的默认值/static/?是否STATIC_URL必须能够参考STATIC_ROOT

python django django-staticfiles

14
推荐指数
2
解决办法
5272
查看次数

SVN中的'删除'和'unversion'有什么区别?

我有一个在SVN中受到版本控制的文件(我使用tortoiseSVN).这个文件已经过时了,因此我不再希望它在我的仓库的工作副本中.但是,保留该文件的历史记录可能会很好.

我本质上想要"删除"此文件,以便不再跟踪或"版本化".我可以选择"删除"此文件,或"取消"此文件.

'delete'和'unversion'之间有什么区别?每个命令的用例是什么?

svn version-control

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

C结构点运算符究竟做了什么(低层透视)?

我对C中的结构有疑问.所以当你创建一个结构时,你实际上是在定义一块内存的框架.因此,当您创建结构的实例时,您正在创建一个内存块,以便它能够容纳一定数量的元素.

但是,我对点运算符的作用感到有些困惑.如果我有一个struct Car并且有一个成员GasMileage(这是一个int成员),我可以GasMileage通过做类似的事情来获得价值,

int x = CarInstance.GasMileage;
Run Code Online (Sandbox Code Playgroud)

但是,我对这个点运算符实际发生的事情感到困惑.点运算符是否只是作为基址的偏移量?它究竟是如何推断出它是一个整数?

我想我对幕后发生的事情很好奇.GasMileage通过做其他事情可以参考吗?如

int *GasMileagePointer = (&carInstance + offsetInBytes(GasMileage));
int x = *GasMileage
Run Code Online (Sandbox Code Playgroud)

这只是我快速弥补的事情.我一直在努力寻找一个好的解释,但似乎没有什么比将点运算符视为魔术更能解释它了.

c struct

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

为什么我必须从继承的类重新声明虚函数?

我正在研究一个简单的C++程序,并且很难理解我遇到的编译器错误.这个问题是由我尝试从基类创建派生类引起的.我在下面发布了相同结构的代码,但更改了名称.

BaseClass.h

#ifndef BASECLASS_H
#define BASECLASS_H

class BaseClass {

    public:
        BaseClass(void);

        virtual int method1(void) = 0;
        virtual int method2(void) = 0;
        virtual float method3(void) = 0;

};

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

DerivedClass.h

#ifndef DERIVEDCLASS_H
#define DERIVEDCLASS_H

#include "DerivedClass.h"

class DerivedClass: public BaseClass
{

    public:
        DerivedClass(void);     
};

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

DerivedClass.cpp

#include "DerivedClass.h"

DerivedClass::DerivedClass(void)
{
}

int DerivedClass::method1(void)
{
  // TODO
} 

int DerivedClass::method2(void)
{
  // TODO
}

float DerivedClass::method3(void) 
{
  // TODO
}
Run Code Online (Sandbox Code Playgroud)

尝试编译时,我得到所有虚拟方法的以下错误:

no 'int DerivedClass::methodX()' member function declared in …
Run Code Online (Sandbox Code Playgroud)

c++ virtual inheritance

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

Java JAR找不到文件

我在eclipse中运行一个引用程序源文件夹中的文件的程序.但是,当我将程序导出到可运行的JAR时,程序似乎无法找到该文件.从本质上讲,该程序在eclipse中工作得很好,但是当它是一个独立的程序时却不会这样做.

我附上了一张如何在程序中引用该文件的照片.

在此输入图像描述

load jar reference file path

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

C包括警卫究竟做了什么?

我有一个关于在C中包含警卫的问题.我已经做了一些阅读,但我会欣赏一点澄清.

假设我有一个带有函数定义的头文件"header.h".

#ifndef HEADER_FILE
#define HEADER_FILE

int two(void){
return 2;
}

#endif
Run Code Online (Sandbox Code Playgroud)

这个头文件有一个包含保护.但是,我对#define HEADER_FILE实际上在做什么感到困惑.假设我忘记了包含守卫,完全忽略添加'#define HEADER_FILE'对我来说是完全合法的.

所以我的问题是:当我们定义HEADER_FILE时,我们到底在做什么?我们定义了什么?为什么忘记包含警卫是可以的,在这种情况下我们也忘了添加#define HEADER_FILE?

任何帮助表示赞赏!

c macros include-guards header-files c-preprocessor

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

C++如何传递多个参数?

假设我有一个概率类,其方法可以计算数组的平均值.因为这个方法可能会传递一个float,double,int等数组,所以我认为将这个方法作为模板方法是合适的.

但是当传递数组时,我必须定义数组的类型和数组的长度.所以我的问题是:如何配置模板以接受两个输入?我已经引用了网络,但看到一个好例子的运气有限.

  • 定义模板以接受int,float等参数是否有效?

我在下面发布了我的代码

概率标题

#ifndef COFFEEDEVMATH_PROBABILITY_H
#define COFFEEDEVMATH_PROBABILITY_H

class Probability
{
    public:
         Probability(void);
        template <typename T, int N>
        void ExpectedValueDataSet(const std::array<T, N>& data)
        {
            T test = data[0]; // This is irrelevant, but simply a place holder example.
        }

    protected:
    private:
};

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

主要

#include <iostream>
#include <Probability.h>

int main()
{

    float hoor[] = {3, 3, 1, 1};
    Probability prob;
    prob.ExpectedValueDataSet(hoor, 4);

}
Run Code Online (Sandbox Code Playgroud)

c++ arrays templates c++11

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

为什么Qt有标准C++对象的'Q'版本(例如QVector,QString等)?

为什么Qt必须在C++中有许多标准对象/数据结构的'Q'版本?推理是从一个源产生的(即需要附加元数据用于格式化目的),还是仅仅取决于具体情况(例如QString允许更多的语言设置,QVectors允许'什么')?

谢谢!

c++ qt

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