这个“现代”消息框 UI 在 Qt 中可用吗?还是纯粹的 Windows API?

Posted

技术标签:

【中文标题】这个“现代”消息框 UI 在 Qt 中可用吗?还是纯粹的 Windows API?【英文标题】:Is this "modern" message box UI available in Qt? Or is it pure Windows API? 【发布时间】:2017-04-06 07:18:36 【问题描述】:

现代 Windows 版本(我会说 7+)具有我经常看到的漂亮 UI:

它看起来不像是从头开始设计的。在我看来,它已经在 Windows API 中可用。

可以在 Qt 中加载它吗?小部件名称是什么?还是只是 MFC 之类的?

【问题讨论】:

这是一个TaskDialog,所以是纯WinAPI,但我猜有一个QT wrapper。 @zett42 哦,非常感谢。实际上这回答了问题。 【参考方案1】:

这三个按钮称为命令按钮或Command Link Control。它最初是作为 Windows XP API 的一部分引入的。图片中的表格(命令链接下有解释文字)我认为是从 Windows Vista 开始可用的。

如果你想要可移植的代码,你不能在 Qt 中使用它。现在连 Wine 都不能显示命令按钮。 (在 Wine 2.0 中它们是不可见的,但可以点击)。

更新:Qt 中有一个QCommandLinkButton 类。

【讨论】:

【参考方案2】:

这称为TaskDialog,从 Windows Vista 开始可用。是纯Win API。

我不知道是否有可用的 Qt 包装器(编辑:@thomiels answer 链接到 Qt 小部件)。

以下是一些用于创建类似于屏幕截图所示对话框的本机代码:

#include <Windows.h>
#include <CommCtrl.h>
#pragma comment(lib,"comctl32.lib")
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

int main(int argc, char* argv[])
   
    TASKDIALOGCONFIG cfg sizeof(cfg) ;
    const TASKDIALOG_BUTTON buttons[] = 
         IDOK, L"Do something" ,
         IDCANCEL, L"Do another something" ,
    ;
    cfg.hInstance                    = ::GetModuleHandle( nullptr );
    cfg.dwCommonButtons              = 0;
    cfg.pszMainIcon                  = TD_INFORMATION_ICON;
    cfg.pszMainInstruction           = L"Here you can do awesome stuff";
    cfg.pszContent                   = L"What do you want to do?";
    cfg.pButtons                     = buttons;
    cfg.cButtons                     = ARRAYSIZE(buttons);
    cfg.dwFlags                      = TDF_USE_COMMAND_LINKS;

    HRESULT hr = TaskDialogIndirect( &cfg, nullptr, nullptr, nullptr );

【讨论】:

我不确定这是一个任务对话框。似乎缺少太多元素。更有可能是使用命令链接的定制对话框。 @thomiel 确实可以创建一个对话框,如 OP 的屏幕截图所示。这只是使用正确参数的问题。我已经添加了一个示例。 @thomiel:没有迹象表明这不是任务对话框。来自About Task Dialogs:“一个任务对话框由几个元素组成,其中大部分是可选的。”您可以剥离一个任务对话框,使其看起来像发布在问题。 也许我错了,WinZip 实际上使用了任务对话框。但是量子物理学家问,是否有可能在 Qt 中使用它。提供代码对他没有帮助。但是感谢 zett42 提到任务对话框!我不知道这存在。 我完全同意。 @TheQuantumPhysicist 应该接受您的回答,因为它实际上显示了一种在 Qt 中创建这样的对话框的方法。

以上是关于这个“现代”消息框 UI 在 Qt 中可用吗?还是纯粹的 Windows API?的主要内容,如果未能解决你的问题,请参考以下文章

Qt显示Linux desktop natification气泡提示框

qt中的ui_mainwindow.h文件是自动创建的吗,还是要手动输入啊,我看别人的源码都不显示这个头文件

angular-ui-bootstrap 模态框可以弹出多个吗

我无法在 WPF 的现代 UI 中启用我的列表框(vs2013 C#)

[转]QT子线程与主线程的信号槽通信-亲测可用!

如何将qt designer中dialog的边框消失