小编Adr*_*ire的帖子

如何在Qt中创建可扩展/可折叠部分小部件

我想在Qt中创建一个具有以下功能的自定义小部件:

  • 这是一个容器
  • 它可以填充任何Qt布局
  • 它可能在任何Qt布局中
  • 按钮允许垂直折叠/折叠内容,因此只有按钮可见,所有包含的布局都是不可见的.
  • 上一个按钮允许再次展开/展开布局内容的大小.
  • 扩展/折叠基于大小(不显示/隐藏)以允许动画.
  • 可用于QDesigner

为了提供一个想法,这里是一个类似的小部件(而不是Qt)的图像: 在此输入图像描述

我已经有一个正常工作的框架,并在QDesigner中公开.我现在需要让它扩展/崩溃,这似乎并不那么简单.

我尝试使用resize(),sizePolicy(),sizeHint(),但这不起作用:当框架折叠时,我得到以下值:

sizeHint: (500,20)
size    : (500,20)
closestAcceptableSize: (518,150)
Painted size: (518, 150)
Run Code Online (Sandbox Code Playgroud)

QLayout :: closestAcceptableSize不是小部件的一部分,因此我无法更改它.

任何提示或/和代码片段来实现这一点?

编辑:这是一个简单的例子.除了必要的我删除了所有.

main.cpp示例

#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>

#include "section.hpp"


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


    // Create the main Window
    QWidget window;
    window.resize(500,500);
    window.setStyleSheet("QPushButton:{background-color:rgba(128,128,128,192);}");

    // Create the main window layout
    QVBoxLayout topLayout(&window);
    QWidget *w1 = new QWidget();
    w1->setStyleSheet("background-color:rgba(128,128,128,192);");
    topLayout.addWidget(w1);

    Section section(&window);
    topLayout.addWidget(&section);

    QVBoxLayout inLayout(&section);
    QPushButton *button = …
Run Code Online (Sandbox Code Playgroud)

c++ qt widget custom-controls qwidget

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

OpenVG实现?

哪些OpenVG实现存在?

每个人的利弊是什么?

我正在寻找一种高度稳定,快速的渲染实现,仍然在积极维护和开发.

openvg

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

`memory_resource`的目的和用法是什么?

该标准C++17包括一个新的命名空间,pmr包括一组以名称分组的类memory_resource.

在网上搜索后,我发现很少有关于它的庸俗信息,直接后果是这个问题:

背后的主要思想pmrpmr::memory_resource什么?


详细说明问题,我头脑中的一些问号是:

  • 它带来了什么新东西,或它解决的限制是什么?
  • 有什么区别allocator
  • 多态是否意味着可以选择allocator提供给容器构造函数的运行时?(例如用于测试目的)
  • 它是否有助于实现内存池或其他内存管理方案?

语境:

在创建memory pool分配器的过程中,我找到了有关此命名空间的信息.读名字pool_options或者polymorphic_allocator引起我的注意.


相关问题:

polymorphic_allocator:何时以及为什么要使用它?

c++ allocator c++17

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

使用MinGW编译64位二进制文​​件(Dev-C++)

这可能是一个愚蠢的问题,但我正在寻找大约3小时的答案.

¿如何用(Dev-C++)MinGW编译64位二进制文​​件?

我已经知道MinGW默认支持64位,但我无法激活此选项.

我试过"-m64",但它说:"对不起,未实现:64位模式未编译"

我正在使用Windows-7上的Dev-C++

我知道如何在MSVC++上做到这一点,但我不想要MSVC++(道德问题的原因)

我正在尝试编译,仅用于测试目的:

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{   
    // Test compiling mode
    if (sizeof(void*) == 8) cout << "Compiling 64-bits" << endl;
    else cout << "Compiling 32-bits" << endl;

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

c++ windows 64-bit g++ dev-c++

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

如何在两个(内联)元素之间插入空格?

上下文

我正在创建一个XSL-FO文档,将我的XML文本转换为PDF.

在XSL-FO中,我有两个连续的内联元素,我想在它们之间有一个空格:

<fo:block>
    <xsl:number/> <xsl:value-of select="@title"/>
</fo:block>
Run Code Online (Sandbox Code Playgroud)

预期结果将是:

1简介

相反,我得到了

1简介

似乎XML不考虑这个空白区域.

尝试

我尝试了几种可能的解决方案,没有成功:

<fo:block>
    <xsl:number/><fo:inline white-space="pre">  </fo:inline><xsl:value-of select="@title"/>
</fo:block>
Run Code Online (Sandbox Code Playgroud)

要么

<fo:block>
    <xsl:number/><fo:inline margin-left="0.5cm"><xsl:value-of select="@title"/></fo:inline>
</fo:block>
Run Code Online (Sandbox Code Playgroud)

这些想法都没有产生可接受的结果.

问题:

如何在两个(内联)元素之间包含空格?

xslt xsl-fo apache-fop

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

如何处理"超级"调用和递归

我的问题是合并两种技术:

  • 递归调用超级函数
  • 递归调用相同的函数

假设一个具有递归函数(foo)的根类和一个覆盖此函数的扩展类(foo):override函数必须调用super :: foo,但需要在递归调用之前执行其他操作.

我将尝试一个例子(这只是一个例子,我知道有非递归的方法来解决这个问题)

class Node
{
public:
    // must be override
    virtual int getNumValues()
    {
        if (parent) return parent->getNumValues() + 3;
        else return 3; 
    }
protected:
    Node *parent;
private:
    int values[3];
};

class ExtNode: Node
{
public:
    //@override
    virtual int getNumValues()
    {
        int aux = Node::getNumValues(); //but need to avoid recursion here.
        if (parent) return parent->getNumValues() + aux + 2;
        else return aux + 2;
    }
private:
    int extValues[2];
};
Run Code Online (Sandbox Code Playgroud)

所以我想要的是:

  • 我可能会更改这两个类:Node和ExtNode.
  • 我不会将代码从第一类方法复制到第二类以避免超级调用(类链可能很长)
  • 递归调用应该由最时髦的类完成

我正在尝试一些想法,但它们似乎很糟糕的编程实践或不可能:

// …
Run Code Online (Sandbox Code Playgroud)

c++ recursion super

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

使用std :: string在DLL中创建一个类.C4251警告

我想在DLL中实现一个简单的类,如:

class MY_EXPORT_IMPORT MyClass
{
public:
    //std::string anyPublicStr; //see point 3
protected:
    std::string anyStr;
};
Run Code Online (Sandbox Code Playgroud)

问题是Visual C++编译器(在本例中为2013)会抛出以下警告:

C:... MyClass.hpp:X:警告:C4251:'MyClass :: postfix':类'std :: basic_string,std :: allocator>'需要让struct'MyClass的客户端使用dll接口"

我阅读了几个论坛,了解为什么会显示此警告以及如何解决此问题.但我仍不清楚:

  1. 大多数论坛都谈到导出模板,这对模板有意义,但std :: string已经是一种特定类型.
  2. 另一页说"从DLL导出std :: string是一个非常糟糕的主意,原因有几个." 这是有道理的.
  3. 其他人指出将参数封装在非内联函数中的解决方案.好吧,在我们的例子中,std :: string已经受到保护,切换到private并不能解决警告问题.

就个人而言,我不明白为什么这个类不能静态链接所需的STL库并使其工作而不导出任何东西.或者如果STL是动态链接的,它也应该在dll中自动链接.

这是警告的原因?怎么解决?

c++ dll stl compiler-errors c++11

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

如果不活动,Firefox会随机关闭XMLHttpRequest连接.为什么?

在JavaScript类中,XMLHttpRequest连接到服务器.服务器正在缓慢地发送数据.这在Chromium中运行良好,但Firefox在随机时间后(约4s到~70s之间)关闭连接.

为什么Firefox会关闭连接?以及如何避免这种情况?

简化的JS代码:

    var options = {};
    options['header']=
        { 'Cache-Control':'no-cache, max-age=0', 
            'Content-type': 'application/octet-stream',
            'Content-Disposition': 'inline'
        };

    // Get request information
    this.http = new XMLHttpRequest();
    this.http.onreadystatechange = _streamingResponse.bind(this);
    this.http.open('post', url, true);
    for (var i in options['header'])
    {
        this.http.setRequestHeader(i, options['header'][i]);
    }
    this.http.send('');
Run Code Online (Sandbox Code Playgroud)

对于PHP部分,类似于:

sleep(200); //wait long time, so firefox close the socket.
Run Code Online (Sandbox Code Playgroud)

如果服务器每隔几秒钟(<5s)发送一次内容,则连接会"永远"保持活动状态.但是如果没有发送数据,Firefox会关闭连接.

连接关闭: - readyState = 4 - status = 0

服务器似乎是正确的,因为在Chromium中它可以正常工作.

完整的测试代码:

的test.html

<html>
<header>
</header>
<body>
</body>

<script type="application/javascript">

    function log( msg )
    {
        document.body.appendChild(document.createElement('div').appendChild(document.createTextNode(msg)));
        document.body.appendChild(document.createElement('br'));
    }

    function request(url) …
Run Code Online (Sandbox Code Playgroud)

javascript firefox http xmlhttprequest

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

模板类中的条件引用声明

在模板类中,如何有条件地为模板定义属性别名?

例:

template<class Type, unsigned int Dimensions>
class SpaceVector
{
public:
    std::array<Type, Dimensions> value;
    Type &x = value[0]; // only if Dimensions >0
    Type &y = value[1]; // only if Dimensions >1
    Type &z = value[2]; // only if Dimensions >2
};
Run Code Online (Sandbox Code Playgroud)

这个有条件的声明可能吗?如果有,怎么样?

c++ alias templates c++11

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

在提供`T = std :: complex <Q>`时如何避免嵌入`std :: complex`?

对于多项式方程求解器,将其模板化以使任何类型可用是很好的:

template <class number, int degree>
class PolynomialEquation
{
public:

private:
    array<number, degree+1> myEquation;
    array<complex<number>, degree> equationResult;
};
Run Code Online (Sandbox Code Playgroud)

例如,这允许double在ℝ中用于输入,并且结果std::complex<double>在ℂ中(我们知道从2级及以上,方程的解通常落入ℂ,例如:x ^ 2 + 1).

但是,等式的输入也可以是a std::complex.在这种情况下,类型myEquation应该是复杂的,但equationResult不应该是a std::complex<complex<T>>,而只是正常的复数类型T.

问题:

如何在提供方程时使类型equationResult成为子类型?std::complexstd::complex

是否有std::is_floating_point类似std :: is_complex_number 的等价物?

c++ templates complex-numbers c++11

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