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

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

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

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

【问题讨论】:

  • 这是一个TaskDialog,所以是纯WinAPI,但我猜有一个QT wrapper。
  • @zett42 哦,非常感谢。实际上这回答了问题。

标签: c++ windows qt mfc


【解决方案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 中创建这样的对话框的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2018-07-26
    • 2012-04-30
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多