小编mat*_*son的帖子

是否可以从 Visual Studio 调试 QML?

我有一个加载 QML 项目的 QT 项目。当我从 QT Creator 运行程序时,调试程序的 QML 部分没有问题。我已经添加

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG ")

到我的 CMakeLists.txt 并检查“项目->运行”中“调试器设置”下的“启用 QML”

但我想从 Visual Studio 进行调试,因为那是我们通常工作的环境。

当您选中“启用 QML”框时,是否可以手动执行 QT Creator 所做的操作,以从 Visual Studio 激活调试?附加到某个进程或类似的进程?

我试图弄清楚“启用 QML”框的实际用途。但我一直无法找到对此的任何好的解释。

我们使用 CMake 来构建,MSVC 作为编译器,CDB 作为调试器。这些项目采用 QT5.5 和 QT Quick 2。Visual Studio 版本为 2015 Professional,QT Creator 版本为 4.1.0。

debugging qt visual-studio qml

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

当我调用NavigateService.Navigate()时,Windows Phone应用程序调用MapUri()两次

我最近添加了一个自定义UriMapper,用于在从IE打开文件时将文件保存到我的应用程序隔离存储中.这个代码看起来像这样:

class AssociationUriMapper : UriMapperBase
{
    public override Uri MapUri(Uri uri)
    {
        var tempUri = uri.ToString();

        if (tempUri.Contains("/FileTypeAssociation"))
        {                
            int fileIdIndex = tempUri.IndexOf("fileToken=") + 10;
            string fileId = tempUri.Substring(fileIdIndex);

            SaveFileToIsolatedStorage(fileId);

            return new Uri("/MainPage.xaml", UriKind.Relative);                
        }

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

InitializePhoneApplication()中我做了一个

RootFrame.UriMapper = new AssociationUriMapper();
Run Code Online (Sandbox Code Playgroud)

当然,我已经将扩展标记添加到WMAppManifest.xml

这一切都很好......但我发现了一个奇怪的行为.每次从IE打开文件时,我都会得到两份文件.当我在被覆盖的MapUri中放置一个断点时,每次应用程序从IE自动启动时它都会被击中两次.

当我开始进一步调查时,我注意到只要我调用NavigateService.Navigate()就会发生这种情况 .但是当我调用NavigateService.GoBack时却没有.

有谁知道为什么会这样?为什么在调用Navigate()MapUri()调用了两次?是否在创建页面的新实例时发生了什么?(我注意到当我们调用Navigate()时会创建一个新的被调用页面实例,但是当我们调用GoBack()时,我们会检索已创建的页面实例(我们导航过).

编辑:
我现在从头开始做了一个小测试应用程序.结果是一样的.如果我有一个继承自UriMapperBase的类并覆盖MapUri方法,那么只要我导航到应用程序或在应用程序中调用NavigateService.Navigate(),就会调用两次MapUri.

我的问题的明显解决方法当然是有一个单独的页面,应用程序导航到该页面调用SaveFileToIsolatedStorage() …

c# uri map navigateuri windows-phone

5
推荐指数
1
解决办法
792
查看次数

系统事件 EVENT_SYSTEM_SWITCHSTART 和 EVENT_SYSTEM_SWITCHEND 在 Windows 7 中有效,但在 Windows 10 中无效

添加信息:
当我在 Windows 7 中使用 .exe 文件时,一切都会正常工作。它在 Windows 10 中不起作用。我不明白为什么。

原帖:
也许我只是需要更多咖啡......但我正在尝试编写一个小程序来监听 Alt+Tab 事件。因此,我添加了SetWinEventHook来监听EVENT_SYSTEM_SWITCHSTARTEVENT_SYSTEM_SWITCHEND。因为这就是我认为根据 MSDN 执行此操作的方法:SetWinEventHookWinEventProc 回调Event 常量

由于某种原因,这些事件似乎从未发生过。但更可能的是我错过了一些东西。

当我没有让它在我的实际应用程序中工作时,我创建了这个小应用程序来测试它。它也在那里不起作用。但其他事件确实有效。EVENT_SYSTEM_FOREGROUNDEVENT_OBJECT_CREATEEVENT_OBJECT_DESTROY一直在发生。

我的小型测试应用程序的代码:

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

namespace
{
    HWINEVENTHOOK sTabHook;
    HWINEVENTHOOK sFocusHook;
    HWINEVENTHOOK sCreateHook;
}

void CALLBACK tabEventProc(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
    printf("Never happens!");
    if (EVENT_SYSTEM_SWITCHSTART == event)
    {
        printf("Tab start\n");
    } …
Run Code Online (Sandbox Code Playgroud)

c++ events alt-tab windows-10 visual-studio-2017

4
推荐指数
1
解决办法
901
查看次数

与 if 进行比较时与与存储值进行比较时的 std::vector擦除结果不同

vector::erase由于某种原因,当比较语句内部的返回值if或者先存储值然后比较时,我会得到不同的结果。但这似乎只发生在 g++ 中。

这是使用 g++、libstdc++ 和-std=c++14flag 在 Ubuntu 20.04 AMD64 上构建的。 g++ -std=c++14 foo.cpp && ./a.out

这将返回false

#include <vector>
#include <iostream>
#include <algorithm>

int main()
{
    std::vector<int> v{0, 1, 8, 3, 8, 5, 8, 7,8, 9};
    int thing_id{9};

    std::vector<int>::iterator const cit{
        std::remove_if(v.begin(),
                        v.end(),
                        [thing_id](int const& thing) -> bool {
                            return thing == thing_id;
                        })};

    if (v.erase(cit, v.cend()) == v.cend()) {
        std::cout << "true\n";
        return true;
    }
    else {
        std::cout << "false\n";
        return false;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ libstdc++ comparison-operators erase-remove-idiom qcc

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