当重试子项被隐藏时,我将如何调整窗口小部件的大小,使其看起来像在第一个图像中?主要布局是QVBoxLayout,重试子是一个带有QVBoxLayout的小部件.
我尝试过以下方法:
一旦我将重试小部件设置为隐藏,就在主小部件上.我是否需要拦截某些事件才能执行此操作?
我们一直在寻找答案,但尚未找到解决方案.
我们有一个Web服务器,允许用户下载文件(pdfs),这些文件是从servlet动态生成和提供的.我们想知道下载何时完成(以及如何成功,是否失败,用户取消了吗?).
有没有办法在没有用户输入的情况下知道这个?这些文件相对较小,因此不需要进度条功能,但我们需要某种"端钩",它会在下载完成后报告.这可能吗?
[编辑]浏览器端有什么功能可以检测下载结束并通过ajax报告回服务器?
我试图在Windows中以编程方式找出可用的磁盘空间.为此,我需要先获取可用驱动器的列表,然后检查其中哪些是本地驱动器,然后查询每个本地驱动器上的可用字节.
我有点卡在第一部分,其中API提供了两个功能:
GetLogicalDrives
(http://msdn.microsoft.com/en-us/library/aa364972(VS.85).aspx)它给你一个设置位的DWORD(如果驱动器A存在,则为位0,如果驱动器B等,则为位1) )GetLogicalDriveStrings
(http://msdn.microsoft.com/en-us/library/aa364975(VS.85).aspx)它给你实际的字符串.现在,虽然我稍后会使用字符串,但我更喜欢使用第一个选项进行查询.但是,在我的系统上,DWORD的类型定义为"unsigned long",这是4个字节,而驱动器号只有AZ(26 - 我认为 - 字符).显然,可以在他们的系统上定义超过26个驱动器(但不太可能这样做) - 所以我想知道这些驱动器是否有任何约定.有人能指点我这个资源吗?
谢谢.
我看到一个问题,在析构函数中调用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) 对于以下我假设一张网卡.
我有我的程序的一个组件,旨在让子网中的其他人知道它的存在.为此,我已经实现了一个解决方案,无论何时程序启动(以及之后定期)它都会向广播发送广播INADDR_BROADCAST
- 无论谁在所需端口上进行侦听,都会记住它来自何处以供以后使用.
这个问题是我不想记住我自己的广播.我认为理论上这很容易做 - 只需找出本地ip并与你得到的内容进行比较recvfrom
.
但是,我发现很难获得本地IP:getaddrinfo
返回NULL 127.0.0.1
,getaddrinfo
主机名返回公共IP.任何人都可以指向我找到实际的子网IP的方向?我想我必须错过一些非常明显的东西但是......我还是错过了:)
注意:我已经阅读了有关广播的其他SO问题,特别是这一个:所有接口上的UDP-Broadcast,但我尚未解决多接口问题.
我在使用条件运算符获取对象的引用时遇到了一些麻烦.我有一个类似于这样的设置:
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) 我遇到了一个我不明白的问题,我希望这里有人可以提供一些见解.简化代码如下(原始代码是自定义队列/队列迭代器实现):
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++图片中遗漏了一些东西.
简而言之,我的问题是:如何在类中保留一个可变的,不可删除的,可能是NULL的对象实例.
较长的版本是:
我有以下场景:一堆类(我可以稍微改变,但不彻底重构),其中大多数需要使用一个对象.此对象虽然可变,但由其他人管理,因此不能删除它.
这一类中的一些类不需要这样的对象 - 它们重用来自其他类的代码,但是通过提供给这些类的可用参数,即使提供了对象,也不会使用它.
当前实现使用指向const-object(const Obj *
)的指针.反过来,这意味着所有对象的方法必须是const,并且大多数字段都是可变的.这是一个混乱的解决方案,因为声明的字段mutable
都可用于检查(所以相当的C++精简版入门的对面这里).它也只是部分地解决了"do-not-delete-this-here"问题(编译器没有抱怨,但是const
在对象前面是一个指示).
如果我使用了对这个对象的引用,我会强制一些调用者创建一个"虚拟"对象并将它提供给它们实例化的类.这也是一种混乱,除了浪费资源.由于项目限制,我无法创建一个可以代表"NULL"引用的全局对象.
我觉得引用是我需要的工具,但我无法重构所涉及的类,以至于让对象从它们未被使用的实现中消失(它可以完成,但它并不简单,它会不快#).所以我想实现一些更简单的东西,如果有人试图滥用这个对象,它只会绘制一个警报信号,但保持我的对象可变.
我能想到的最好的解决方案是使用const-pointer-to-object(Obj * const
) - 这不会让编译器抱怨,但是我有可变对象和一种报警信号const
- 通过- 到位.
有没有人有更好的主意?