小编lau*_*ura的帖子

在隐藏子项时调整qt小部件的大小

当重试子项被隐藏时,我将如何调整窗口小部件的大小,使其看起来像在第一个图像中?主要布局是QVBoxLayout,重试子是一个带有QVBoxLayout的小部件.

我尝试过以下方法:

  • 更新()
  • updateGeometry()
  • setGeometry(childrenRect())
  • 布局() - >激活()

一旦我将重试小部件设置为隐藏,就在主小部件上.我是否需要拦截某些事件才能执行此操作?

qt resize qwidget

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

浏览器下载完成事件

我们一直在寻找答案,但尚未找到解决方案.

我们有一个Web服务器,允许用户下载文件(pdfs),这些文件是从servlet动态生成和提供的.我们想知道下载何时完成(以及如何成功,是否失败,用户取消了吗?).

有没有办法在没有用户输入的情况下知道这个?这些文件相对较小,因此不需要进度条功能,但我们需要某种"端钩",它会在下载完成后报告.这可能吗?

[编辑]浏览器端有什么功能可以检测下载结束并通过ajax报告回服务器?

java web-applications file download

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

Windows中的最大驱动器数量?

我试图在Windows中以编程方式找出可用的磁盘空间.为此,我需要先获取可用驱动器的列表,然后检查其中哪些是本地驱动器,然后查询每个本地驱动器上的可用字节.

我有点卡在第一部分,其中API提供了两个功能:

  1. GetLogicalDrives(http://msdn.microsoft.com/en-us/library/aa364972(VS.85).aspx)它给你一个设置位的DWORD(如果驱动器A存在,则为位0,如果驱动器B等,则为位1) )
  2. GetLogicalDriveStrings(http://msdn.microsoft.com/en-us/library/aa364975(VS.85).aspx)它给你实际的字符串.

现在,虽然我稍后会使用字符串,但我更喜欢使用第一个选项进行查询.但是,在我的系统上,DWORD的类型定义为"unsigned long",这是4个字节,而驱动器号只有AZ(26 - 我认为 - 字符).显然,可以在他们的系统上定义超过26个驱动器(但不太可能这样做) - 所以我想知道这些驱动器是否有任何约定.有人能指点我这个资源吗?

谢谢.

windows drivers

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

在析构函数中加入boost :: thread实例

我看到一个问题,在析构函数中调用boost的thread-> join会导致死锁.我不明白为什么,而且我不太热衷于保持代码在项目中正常工作(我不明白为什么会这样).

类声明(我为了简洁而剥离了try/catch的run()方法:根据boost线程文档,结果应该是相同的,有或没有):

class B 
{
public:
    void operator()(){run();}
    void run();
    void shutdown();
    ~B();
    B();
    boost::thread *thr;
    bool shutdown_requested;
};

void B::shutdown()
{
    shutdown_requested = true;

    if (thr != NULL)
    {
        thr->interrupt();
        thr->join(); // deadlock occurs here!
        delete thr;
        thr = NULL;
    }
}

B::~B()
{
    shutdown();
}

B::B()
{
    thr = new boost::thread(boost::ref(*this));
}

void B::run()
{
    while (!shutdown_requested)
    {
        boost::xtime xt;
        boost::xtime_get(&xt, boost::TIME_UTC);
        xt.sec += 30;
        boost::this_thread::sleep(xt);
    }
}
Run Code Online (Sandbox Code Playgroud)

片段不起作用:

int main()
{
    B *b = new B; …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost deadlock

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

如何忽略自己的广播udp数据包

对于以下我假设一张网卡.

我有我的程序的一个组件,旨在让子网中的其他人知道它的存在.为此,我已经实现了一个解决方案,无论何时程序启动(以及之后定期)它都会向广播发送广播INADDR_BROADCAST- 无论谁在所需端口上进行侦听,都会记住它来自何处以供以后使用.

这个问题是我不想记住我自己的广播.我认为理论上这很容易做 - 只需找出本地ip并与你得到的内容进行比较recvfrom.

但是,我发现很难获得本地IP:getaddrinfo返回NULL 127.0.0.1,getaddrinfo主机名返回公共IP.任何人都可以指向我找到实际的子网IP的方向?我想我必须错过一些非常明显的东西但是......我还是错过了:)

注意:我已经阅读了有关广播的其他SO问题,特别是这一个:所有接口上的UDP-Broadcast,但我尚未解决多接口问题.

c networking udp broadcast berkeley-sockets

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

有条件的运营商问题

我在使用条件运算符获取对象的引用时遇到了一些麻烦.我有一个类似于这样的设置:

class D
{
    virtual void bla() = 0;
};

class D1 : public D
{
    void bla() {};
};

class D2 : public D
{
    void bla() {};
};

class C
{
public:
    C()
    {
        this->d1 = new D1();
        this->d2 = new D2();
    }

    D1& getD1() {return *d1;};
    D2& getD2() {return *d2;}
private:
    D1 *d1;
    D2 *d2;
};

int main()
{    
    C c;    
    D& d = (rand() %2 == 0 ? c.getD1() : c.getD2());    
    return 0;    
}
Run Code Online (Sandbox Code Playgroud)

编译时,这给了我以下错误:

WOpenTest.cpp: …
Run Code Online (Sandbox Code Playgroud)

c++ conditional-operator

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

内部类中的默认赋值运算符,带有引用成员

我遇到了一个我不明白的问题,我希望这里有人可以提供一些见解.简化代码如下(原始代码是自定义队列/队列迭代器实现):

class B
{
public:
    B() {};
    class C
    {
    public:
        int get();
        C(B&b) : b(b){};
    private:
        B& b;
    };
public:
    C get_c() { return C(*this); }
};

int main()
{
    B b;
    B::C c = b.get_c();


    c = b.get_c();
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

编译时,这会给我以下错误:

foo.cpp: In member function 'B::C& B::C::operator=(const B::C&)':
foo.cpp:46: error: non-static reference member 'B& B::C::b', can't use default assignment operator
foo.cpp: In function 'int main()':
foo.cpp:63: note: synthesized method 'B::C& B::C::operator=(const B::C&)' first required here
Run Code Online (Sandbox Code Playgroud)

我可以通过使用两个单独的C变量解决这个问题,因为它们应该是独立的'C'对象,但这只能隐藏问题(我仍然不明白为什么我不能这样做).

我认为原因是参考不能被复制,但我不明白为什么.我是否需要提供自己的赋值运算符和复制构造函数?

c++ reference assignment-operator

7
推荐指数
2
解决办法
5553
查看次数

确保指针不会被删除

我偶然发现了一些我无法弄清楚的东西,所以我觉得我在大C++图片中遗漏了一些东西.

简而言之,我的问题是:如何在类中保留一个可变的,不可删除的,可能是NULL的对象实例.

较长的版本是:

我有以下场景:一堆类(我可以稍微改变,但不彻底重构),其中大多数需要使用一个对象.此对象虽然可变,但由其他人管理,因此不能删除它.

这一类中的一些类不需要这样的对象 - 它们重用来自其他类的代码,但是通过提供给这些类的可用参数,即使提供了对象,也不会使用它.

当前实现使用指向const-object(const Obj *)的指针.反过来,这意味着所有对象的方法必须是const,并且大多数字段都是可变的.这是一个混乱的解决方案,因为声明的字段mutable都可用于检查(所以相当的C++精简版入门的对面这里).它也只是部分地解决了"do-not-delete-this-here"问题(编译器没有抱怨,但是const在对象前面是一个指示).

如果我使用了对这个对象的引用,我会强制一些调用者创建一个"虚拟"对象并将它提供给它们实例化的类.这也是一种混乱,除了浪费资源.由于项目限制,我无法创建一个可以代表"NULL"引用的全局对象.

我觉得引用是我需要的工具,但我无法重构所涉及的类,以至于让对象从它们未被使用的实现中消失(它可以完成,但它并不简单,它会不快#).所以我想实现一些更简单的东西,如果有人试图滥用这个对象,它只会绘制一个警报信号,但保持我的对象可变.

我能想到的最好的解决方案是使用const-pointer-to-object(Obj * const) - 这不会让编译器抱怨,但是我有可变对象和一种报警信号const- 通过- 到位.

有没有人有更好的主意?

c++ pointers

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