当Windows 10中的用户(甚至以前的版本更改显示设置)时,操作系统会为操作系统提供是否保留或还原更改的选项.用户还被给予15秒的窗口.如果他们什么都不做,那么设置将被还原.如果他们选择"保留更改"或"还原",将采取适当的措施.我想在显示此对话框时通知操作系统.
我监视了任务管理器中的所有进程,因此没有生成新进程.所以,我甚至无法跟踪这个过程.这样做的可行方法是什么?我知道一种实现方法,听一下WM_DISPLAYCHANGE事件.但这不是一种可靠的方法,因为用户被给予了15秒的窗口.基本上,我想在对话框出现时收到通知并消失.我有什么想法可以实现这个?
顺便提一下,我需要为Windows 10实现这一点.所以Windows 10的信息将是最有帮助的.谢谢!
那么,如果我在子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) 我已经将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) 我正在寻找一个工具,它允许我创建一个可以接受参数的自解压可执行文件。这些参数稍后将传递到驻留在自解压 exe 包含的包中的批处理文件。
这是我想要逐步实现的目标:
用户类型:cmd>setup.exe arg1 arg2 arg3 arg4 arg5
预期行为:1) setup.exe 将其内容提取到某个文件夹 2) 然后它执行带有 arg1、arg2、...arg5 参数的批处理文件
有人知道这样的工具吗?
问题在于重定向 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/
,我猜这就是我做错的事情?
更新:
以下代码正在运行,我遇到问题的原因是因为在获得授权一次后,我再次运行代码,并且由于我已经获得授权,所以我收到了此错误。
最好QOAuth2AuthorizationCodeFlow
在堆上创建一个实例,就像 @Chilarai 在他的示例代码中所做的那样。因为无论如何我们都不希望QOAuth2AuthorizationCodeFlow
超出范围,因为我们将需要它来提出进一步的请求。
这里的另一个重要注意事项是连接到QOAuthHttpServerReplyHandler::tokensReceived
信号,以获得进一步与您的 Google 服务交互所需的令牌。
稍后可以通过 Google REST Api 测试令牌是否仍然有效,这是一种方法,如果您想与之交互, …
令人惊讶的是,Qt5已弃用StringBuilder
以前版本中的类.我的另一个选择是使用QTextStream
,这是不方便的,因为我有在写入缓冲区(如通过QFile
,QString
).
C++(std::stringstream
),C#(StringBuilder
)和Java(StringBuffer
)都有这些类.Qt怎么样?
我能够检测到连接到我系统的所有显示器.我可以使用以下Windows API调用获取有关它们的大量相关信息:
我正在开发的系统是一个带有2个显示器的AIO(一体机).它有一个外部HDMI输出,我可以连接和外部显示器.然后,通过端口复制器,我能够连接第4个监视器.所有的显示器都在扩展我的桌面,所有这些都运行良好.
我的任务是检测通过HDMI端口连接的显示器.我能够使用上述API提取的监视器信息不提供任何特定信息,通过该信息我将能够检测端口类型(例如HDMI或USB).
有谁知道使用什么API?谢谢!
我有一个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) 为什么我可以这样做:
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
不能像if
can那样评价它?
为了使用 实现所需的行为while
,我必须以这种方式实现它:
int result = getValue();
while (result > 100) {
//do something
result = getValue();
}
Run Code Online (Sandbox Code Playgroud) c++ ×6
qt ×3
.net ×2
c# ×2
mvvm ×2
qt5 ×2
winapi ×2
windows ×2
wpf ×2
arguments ×1
c++17 ×1
c++20 ×1
exe ×1
hook ×1
if-statement ×1
installation ×1
oauth-2.0 ×1
parameters ×1
qt-creator ×1
qtwidgets ×1
qwidget ×1
stream ×1
while-loop ×1
windows-10 ×1
windows-8.1 ×1
wmi ×1
xaml ×1