小编arm*_*ali的帖子

获取有关Windows 10的还原/保留新显示设置对话框的通知

当Windows 10中的用户(甚至以前的版本更改显示设置)时,操作系统会为操作系统提供是否保留或还原更改的选项.用户还被给予15秒的窗口.如果他们什么都不做,那么设置将被还原.如果他们选择"保留更改"或"还原",将采取适当的措施.我想在显示此对话框时通知操作系统.

我监视了任务管理器中的所有进程,因此没有生成新进程.所以,我甚至无法跟踪这个过程.这样做的可行方法是什么?我知道一种实现方法,听一下WM_DISPLAYCHANGE事件.但这不是一种可靠的方法,因为用户被给予了15秒的窗口.基本上,我想在对话框出现时收到通知并消失.我有什么想法可以实现这个?

顺便提一下,我需要为Windows 10实现这一点.所以Windows 10的信息将是最有帮助的.谢谢!

在此输入图像描述

c++ windows hook winapi windows-10

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

我应该在子视图模型中存储对父视图模型的引用吗?

那么,如果我在子ViewModel中存储父ViewModel的引用会是犯罪吗?我会打破MVVM规则吗?我的子视图是一个带有上下文菜单的窗口.选择适当的菜单项时,需要创建新的子视图.父级仅负责创建子视图.所以保持对父视图模型的引用,对我来说会有很大帮助.同时我不想打破模式规则.

class MainViewModel
{
    List<ChildViewModel> _childrenViewModels = new List<ChildViewModel>();

    public AddChild(ChildViewModel childViewModel)
    {
        _childrenViewModels.Add(childViewModel);
        childViewModel.Owner = this;
    }
}

class ChildViewModel
{
    private Child _child;
    public MainViewModel Owner { get; set; }

    public ChildViewModel(Child child)
    {
        _child = child;
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# wpf mvvm

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

重新排序QTreeWidgetItem后,QTreeWidgetItem中的QWidget消失

我已经将QTreeWidget(称为ToolsSelectorWidget)子类化,并通过重写QTreeWidget :: dropEvent()启用了重新排序

void ToolsSelectorWidget::dropEvent(QDropEvent *event) {
    QModelIndex droppedIndex = indexAt(event->pos());

    if( !droppedIndex.isValid() || droppedIndex.parent().isValid()) {
        return;
    }
   QTreeWidget::dropEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

另外,我将QWidgets(QPushButton,QLineEdit)添加到QTreeWidget的顶级项目中:

ToolsSelectorWidget::ToolsSelectorWidget(QWidget *parent) : QTreeWidget(parent) {
    header()->hide();
    setSelectionMode(QAbstractItemView::SingleSelection);
    setDragEnabled(true);
    viewport()->setAcceptDrops(true);
    setDropIndicatorShown(true);
    setDragDropMode(QAbstractItemView::InternalMove);

    for(int i=0; i<4; ++i) {
        QTreeWidgetItem *part = new QTreeWidgetItem(this);
        part->setFlags(part->flags() & Qt::ItemFlag((~Qt::ItemIsDropEnabled)));
        setItemWidget(part, 0, new QLabel("Part" + QString::number(i) + " Preview", this));
        setItemWidget(part, 1, new QLineEdit("Part" + QString::number(i) + " Name", this));
        setItemWidget(part, 2, new QCheckBox("Part" + QString::number(i) + " Visible", this));
        setItemWidget(part, 3, new QCheckBox("Part" + …
Run Code Online (Sandbox Code Playgroud)

c++ qt qwidget qt-creator qtwidgets

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

自解压 zip 接受参数

我正在寻找一个工具,它允许我创建一个可以接受参数的自解压可执行文件。这些参数稍后将传递到驻留在自解压 exe 包含的包中的批处理文件。

这是我想要逐步实现的目标:

用户类型:cmd>setup.exe arg1 arg2 arg3 arg4 arg5

预期行为:1) setup.exe 将其内容提取到某个文件夹 2) 然后它执行带有 arg1、arg2、...arg5 参数的批处理文件

有人知道这样的工具吗?

parameters installation arguments exe self-extracting

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

无法使用 QOAuth2AuthorizationCodeFlow 实现 Google 登录

问题在于重定向 URI,我不知道将其设置为什么。有谁能够弄清楚这一点吗?

Qt Creator's我在输出窗格中收到如下错误:

qt.networkauth.oauth2: Unexpected call
qt.networkauth.replyhandler: Error transferring https://oauth2.googleapis.com/token - server replied: Bad Request
Run Code Online (Sandbox Code Playgroud)

这是我的代码,一个调用的函数grant()将返回 true open 成功的身份验证。帮助器类OAuth2Props返回 Google 生成的 JSON 文件中的所有数据。

bool grant() {
  QOAuth2AuthorizationCodeFlow oauthFlow;
  QObject::connect(&oauthFlow,
                   &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser,
                   &QDesktopServices::openUrl);

  oauthFlow.setScope("email");
  oauthFlow.setAuthorizationUrl(OAuth2Props::authUri());
  oauthFlow.setClientIdentifier(OAuth2Props::clientId());
  oauthFlow.setAccessTokenUrl(OAuth2Props::tokenUri());
  oauthFlow.setClientIdentifierSharedKey(OAuth2Props::clientSecret());
  QOAuthHttpServerReplyHandler oauthReplyHandler(
      QUrl(OAuth2Props::redirectUri()).port());
  oauthFlow.setReplyHandler(&oauthReplyHandler);

  QEventLoop eventLoop;
  QObject::connect(&oauthFlow, &QOAuth2AuthorizationCodeFlow::granted,
                   &eventLoop, &QEventLoop::quit);
  oauthFlow.grant();
  eventLoop.exec();

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

对我做错了什么有什么想法吗?我设置的重定向 URI http://127.0.0.1:65535/,我猜这就是我做错的事情?

更新:

  1. 以下代码正在运行,我遇到问题的原因是因为在获得授权一次后,我再次运行代码,并且由于我已经获得授权,所以我收到了此错误。

  2. 最好QOAuth2AuthorizationCodeFlow在堆上创建一个实例,就像 @Chilarai 在他的示例代码中所做的那样。因为无论如何我们都不希望QOAuth2AuthorizationCodeFlow超出范围,因为我们将需要它来提出进一步的请求。

  3. 这里的另一个重要注意事项是连接到QOAuthHttpServerReplyHandler::tokensReceived信号,以获得进一步与您的 Google 服务交互所需的令牌。

  4. 稍后可以通过 Google REST Api 测试令牌是否仍然有效,这是一种方法,如果您想与之交互, …

c++ qt google-authentication oauth-2.0 qt5

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

Qt5是否有类似StringBuilder或StringBuffer的类?

令人惊讶的是,Qt5已弃用StringBuilder以前版本中的类.我的另一个选择是使用QTextStream,这是不方便的,因为我有在写入缓冲区(如通过QFile,QString).

C++(std::stringstream),C#(StringBuilder)和Java(StringBuffer)都有这些类.Qt怎么样?

c++ qt stream qt5

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

在Windows 7/8/10 Win32 C++中检测/识别显示器连接的端口(HDMI,其他)

我能够检测到连接到我系统的所有显示器.我可以使用以下Windows API调用获取有关它们的大量相关信息:

EnumDisplayMonitors

GetMonitorInfo

EnumDisplayDevices

我正在开发的系统是一个带有2个显示器的AIO(一体机).它有一个外部HDMI输出,我可以连接和外部显示器.然后,通过端口复制器,我能够连接第4个监视器.所有的显示器都在扩展我的桌面,所有这些都运行良好.

我的任务是检测通过HDMI端口连接的显示器.我能够使用上述API提取的监视器信息不提供任何特定信息,通过该信息我将能够检测端口类型(例如HDMI或USB).

有谁知道使用什么API?谢谢!

c++ windows wmi winapi windows-8.1

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

WPF MVVM在您键入时更改TextBox大小

我有一个TextBox,随着它的内容增长,我希望它增长,随着它的内容缩小,我希望它在高度和宽度方面都缩小.这可以通过挂钩到TextBox中的TextChanged事件来轻松实现,这意味着代码隐藏,这是我们在MVVM中应该避免的.所以问题是我们如何在MVVM中做到这一点?我们必须明显使用命令(实现ICommand接口的类),同时我们不能将命令挂钩到事件.

一种选择是使用System.Windows.Interactivity.我之前使用它并且它非常整洁,但是有些人可能实际上反对它,因为它使用了更多的Silverlight库.

还有其他选择吗?

一个更简单的XAML.请注意,我希望窗口更改它的大小,因为TextBox占据整个窗口:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid HorizontalAlignment="Stretch">
        <TextBox Width="Auto">            
        </TextBox>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

这是我的XAML:

<Window x:Class="SleekNoteUI.Views.SleekNoteView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    <Window.Template>
        <ControlTemplate>
            <Border...>
                <Grid>
                    <Grid Grid.Row="1" x:Name="noteGrid">
                        <TextBox Grid.Row="0"
                                 Text="{Binding SomeText...}"
                                 Background="{Binding...}">
            </TextBox>
        </Grid>
        </Grid>
    </Border>
    </ControlTemplate>
</Window.Template>
</Window>
Run Code Online (Sandbox Code Playgroud)

.net c# wpf xaml mvvm

0
推荐指数
1
解决办法
1620
查看次数

为什么我们可以在 if 循环中使用分号,而在 while 循环中不能使用分号

为什么我可以这样做:

if (int result=getValue(); result > 100) {
}
Run Code Online (Sandbox Code Playgroud)

但不能这样做:

while (int result=getValue(); result > 100) {
}
Run Code Online (Sandbox Code Playgroud)

为什么要歧视while?条件就是条件。为什么while不能像ifcan那样评价它?

为了使用 实现所需的行为while,我必须以这种方式实现它:

int result = getValue();
while (result > 100) {
    //do something
    result = getValue();
}
Run Code Online (Sandbox Code Playgroud)

c++ if-statement while-loop c++17 c++20

0
推荐指数
1
解决办法
183
查看次数