我正在使用Qt 4.8使用的Windows应用程序
QMessageBox::information
QMessageBox::warning
...
Run Code Online (Sandbox Code Playgroud)
当调用任何函数时,Windows默认播放声音.我的客户对此感到恼火,并希望在不更改Windows设置的情况下永久禁用此功能.
如果这声音怎么能摆脱?
我发现它是从中调用的
void QAccessible::updateAccessibility()
Run Code Online (Sandbox Code Playgroud)
但到目前为止我还没有找到一种方法来禁用它.
我有一个Windows C++应用程序,其中std::hash_set包含500个条目,每个条目包含32个字节.如果我在一个单独的(很多)线程中创建hash_set,它根据ProcessExplorer使用> 1 GB.当我释放清单时,我看到了这一点.如果我在主线程中创建它,它将使用200 MB.这种现象仅适用于我的应用程序的32位版本.它不适用于x64版本.我使用双四核与Win XP x64.它不是内存泄漏.一切都在clear()上释放.
我的猜测:Windows 32.Bit不是为许多线程/多核构建的.
你有什么好处?
在地图的第二个值中搜索我使用如下内容:
typedef std::map<int, int> CMyList;
static CMyList myList;
template<class t> struct second_equal
{
typename typedef t::mapped_type mapped_type;
typename typedef t::value_type value_type;
second_equal(mapped_type f) : v(f) {};
bool operator()(const value_type &a) { return a.second == v;};
mapped_type v;
};
...
int i = 7;
CMyList::iterator it = std::find_if(myList.begin(), myList.end(),
second_equal<CMyList>(i));
Run Code Online (Sandbox Code Playgroud)
问题:如何在不提供自写模板的情况下在一行中进行此类查找?
很久以前,我将GDI +添加到我的Win32应用程序中以绘制渐变.考虑到混合GDI和GDI +输出,我解决了一些问题,一切正常.
现在我开始使用GDI +进行打印,但所有对GDI +的调用似乎都被忽略了,这在屏幕上运行良好.我仔细检查了没有裁剪区域.坐标也在纸上.我还删除了所有GDI输出以进行测试.仍显示空白页面.我试过几台打印机.使用GDI +打印样本进行的测试没有问题.我将我的应用程序中使用的代码添加到示例中,它也可以正常工作.
任何的想法?
我有一个进行 ODBC 连接的 Win32 应用程序。我们连接时SQLDriverConnect()
会显示一个对话框来选择数据源。在 x64 版本中,对话框显示并提供 2 个不同的 32 位 MS ACCESS 驱动程序。当我选择其中之一时,在 32 位版本中,我会看到一个打开文件对话框来选择 .mdb 文件。在 64 位版本中,此时对 SQLDriverConnect() 的调用返回 -1。
SQLError()返回:“[Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序”
通常是否可以从 64 位可执行文件使用 32 位 ODBC 驱动程序?为什么会显示这些驱动程序?据我所知,到目前为止还没有 64 位 MS Access OBDC 驱动程序。我能做些什么?
我正在 Windows XP 上使用 QGraphicsScene 开发 Qt 4.8 应用程序。当用户双击 QGraphicsTextItem 时,我调用
textItem->setTextInteractionFlags(Qt::TextEditorInteraction);
Run Code Online (Sandbox Code Playgroud)
在下一次选择更改时我打电话
textItem->setTextInteractionFlags(Qt::NoTextInteraction);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我找不到办法删除编辑中剩余的背景颜色的反转。在下面的屏幕截图中,我首先双击第一个文本项并选择字符“2927”。然后我点击第二个测试项目并选择“est”。我找不到摆脱第一个文本项中仍然倒置的“2927”的方法(尽管它不再处于编辑模式)。

我也尝试打电话:
textItem->textCursor().clearSelection();
textItem->update();
textItem->setTextInteractionFlags(Qt::NoTextInteraction);
textItem->clearFocus();
Run Code Online (Sandbox Code Playgroud)
但他的行为根本没有改变。
所以现在我找到了一个解决方法:
QString s = textItem->toPlainText();
textItem->setPlainText("");
textItem->setPlainText(s);
textItem->setTextInteractionFlags(Qt::NoTextInteraction);
Run Code Online (Sandbox Code Playgroud)
我不喜欢这样,但它有效。
有什么更清洁的解决方案的提示吗?
我上了这堂课:
class myClass
{
private:
struct tm minDate, maxDate;
public:
myClass();
struct tm GetMinDate() {return minDate;};
struct tm GetMaxDate() {return maxDate;};
};
Run Code Online (Sandbox Code Playgroud)
和这个函数调用
SetMinMaxDate(struct tm *MinDate, struct tm *MaxDate);
Run Code Online (Sandbox Code Playgroud)
以下代码
myClass myInstance;
SetMinMaxDate(&myInstance.GetMinDate(), &myInstance.GetMaxDate());
Run Code Online (Sandbox Code Playgroud)
效果很好,MSVC 2010和2005没有生成任何警告.但是,如果我使用英特尔C++编译它我得到警告
warning #1563: taking the address of a temporary
Run Code Online (Sandbox Code Playgroud)
根据这个相关的线程
临时对象的生命周期(也称为rvalue)与表达式相关联,并且在完整表达式的末尾调用临时对象的析构函数
SetMinMaxDate复制用指针传递的内容.指针本身不存储.因此,在SetMinMaxDate返回之前,2个临时tm元素应该是有效的.
这段代码中是否存在问题,或者这是英特尔C++的误报?
编辑: 我发现了另一个非常有趣的帖子,说明了这种行为的原因: 为什么将rvalue的地址临时取出是非法的?
我们目前正在使用商业库进行 Windows 图像渲染。当显示尺寸小于图像原始尺寸的单色图像时,此库会对图像进行灰度处理,以便仍然可以识别大部分图像:

现在我用 Qt 4.8 应用程序尝试了同样的方法。基本上所做的是调用:
QImage mImage;
...
mImage.load(...);
...
painter.drawImage(paintRect, mImage, mImage.rect());
Run Code Online (Sandbox Code Playgroud)
其中paintRect 小于mImage.rect()。效果很好,但输出不太令人满意:

我尝试了几个渲染提示(QPainter::SmoothPixmapTransform、Antialiasing、HighQualityAntialiasing)并使用
mImage = mImage.convertToFormat(QImage::Format_RGB32);
Run Code Online (Sandbox Code Playgroud)
QPainter::SmoothPixmapTransform 似乎稍微改善了输出(它包含在屏幕截图中)。所有其他的事情似乎都没有改变任何东西。
我错过了什么吗?
如何改善尺寸减小的图像的显示?
运行几个小时后,我的应用程序无法创建新的字体对象:
CreateFontIndirect()返回NULL.
我知道如何找到内存泄漏(即使用并行检查器或其他分析器 - 其中大多数包括泄漏检测).但是如何在Win32中找到资源泄漏?
我正在开展一个涉及优化系统内能耗的项目.该项目的一部分在于根据位置分配RAM内存,即为程序分配尽可能彼此接近的内存段.有没有办法我可以知道我分配的内存的位置到底在哪里(内存芯片),我也想知道是否有可能以确定的方式强制分配.我对Windows和Linux都很感兴趣.此外,该项目将在Java和.NET中实现,因此我对托管API感兴趣以实现此目的.
[我知道这可能不会转化为直接的能源消耗减少,但该项目应该是一个概念证明.]
我是App Engine的新手并编写了一个示例App.如果我创建或更新实体:
Entity record = new Entity(...);
... set properties
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(record);
Run Code Online (Sandbox Code Playgroud)
然后重定向到显示新的或更新的实体的页面
resp.sendRedirect("MainPage.jsp");
Run Code Online (Sandbox Code Playgroud)
执行以下代码的位置
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
Query query = new Query(...).addSort(..., Query.SortDirection.DESCENDING);
List<Entity> entities = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(20));
Run Code Online (Sandbox Code Playgroud)
新记录不在列表中.页面已更新(如显示的时间戳所示),但新记录或现有记录的修改仅在刷新页面后延迟几秒钟后显示.
如何避免这种情况?DataStore可能不适合这样的事情吗?
我正在使用GAE和Windows XP 64的Eclipse本地测试环境.
有许多非常有趣的Google API,我不时会偶然发现一个新的API(即Google Geo Code API或Google Elevation API).
我在哪里可以找到所有Google API的完整列表?我还没找到.
编辑2013/Sep/13: 以下链接似乎已过时,因为它们不再显示完整列表.我在https://developers.google.com/apis-explorer/#p/上找到了另一个 包含有趣内容的列表- 但这个列表 似乎并不完整.
任何更新的链接表示赞赏.
我正在尝试优化和并行化一些代码,这些代码在带有链接和节点的图形结构中进行模拟.一个主要的热点是这样的循环:
void ExecuteAll()
{
for(long i = TotalCount(); i >= 1; i--)
{
long k = linkOrder[i];
long link = firstLink[k];
if (link == 0)
continue;
double d = 0.;
for(; link != 0; link = nextLink[link])
{
long kk = getNode(link);
d += fak[link]*res[kk];
}
d += res[k];
double d2 = d/fak2[k];
res[k] = d2;
res2[k] += d2;
}
}
Run Code Online (Sandbox Code Playgroud)
我通过实现这样的类来重写这个以使用多个线程:
class myDemoClass
{
bool volatile *isDone;
public:
void ExecuteSlice()
{
for(long i = TotalCount() - mThreadIndex; i >= …Run Code Online (Sandbox Code Playgroud)