以编程方式设计 GUI - 嵌套布局和多个小部件 (Qt) 的良好实践

2024-04-08

我有兴趣更好地理解Qt为此我想see 如何仅以编程方式完成嵌套布局和多个小部件 GUI 的相对复杂示例;即不使用 Qt Creator 的设计。

我见过几个示例代码仅演示非常简单的布局,并且几乎总是不使用头文件;事实上我见过的大多数例子,dumpmain 中的代码。据我了解(如果我错了,请纠正我),良好的编程实践要求您将设计分离到单独的类中(例如mainwindow)并且在main.cpp你只需调用和show那个主窗口。也许,最关键的是,所有小部件、布局等的定义都应该在头文件中定义,然后在头文件中调用和定制。mainwindow.cpp.

可以看到以编程方式良好编程实践的一个很好的例子,但对于相对简单的 GUI 设计here https://stackoverflow.com/a/39649750/6167676.

如果有人可以提供在线资源其中良好的编程 GUI 设计的非简单代码示例展示了如何正确定义和自定义嵌套布局和小部件,我们将非常感激。

或者,这里有一个简单的编程 GUI 设计示例,如果能够从中导出代码(无需设计器)以供我学习和理解,那就太好了:

note: 我的重点仅在于嵌套布局、多个小部件以及在不同的 Qt 源文件上定义和调用这些部件的位置和方式.

可以在此处查看嵌套布局和小部件的详细信息:

实际的 GUI 结果如下所示:

UPDATE

正如迈克在评论部分所建议的那样,uic https://doc.qt.io/qt-5/uic.html可以看到设计器所做的代码,在我的例子中,上面提到的示例如下

>uic mainwindow.ui输出:

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QProgressBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QVBoxLayout *verticalLayout_3;
    QFrame *top_frame;
    QGridLayout *gridLayout;
    QSpacerItem *horizontalSpacer;
    QProgressBar *progressBar_2;
    QProgressBar *progressBar_4;
    QSpacerItem *verticalSpacer;
    QSpacerItem *horizontalSpacer_2;
    QPushButton *pushButton_1;
    QProgressBar *progressBar_1;
    QPushButton *pushButton_2;
    QPushButton *pushButton_3;
    QProgressBar *progressBar_3;
    QPushButton *pushButton_4;
    QFrame *bottom_frame;
    QHBoxLayout *horizontalLayout;
    QFrame *frame;
    QFormLayout *formLayout;
    QLabel *label_1;
    QLabel *label_2;
    QSpacerItem *verticalSpacer_2;
    QLineEdit *lineEdit;
    QLineEdit *lineEdit_2;
    QFrame *frame_2;
    QHBoxLayout *horizontalLayout_2;
    QLabel *label_3;
    QSpacerItem *horizontalSpacer_3;
    QLabel *label_4;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QStringLiteral("MainWindow"));
        MainWindow->resize(878, 632);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QStringLiteral("centralWidget"));
        verticalLayout_3 = new QVBoxLayout(centralWidget);
        verticalLayout_3->setSpacing(6);
        verticalLayout_3->setContentsMargins(11, 11, 11, 11);
        verticalLayout_3->setObjectName(QStringLiteral("verticalLayout_3"));
        top_frame = new QFrame(centralWidget);
        top_frame->setObjectName(QStringLiteral("top_frame"));
        QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(0);
        sizePolicy.setHeightForWidth(top_frame->sizePolicy().hasHeightForWidth());
        top_frame->setSizePolicy(sizePolicy);
        top_frame->setFrameShape(QFrame::StyledPanel);
        top_frame->setFrameShadow(QFrame::Raised);
        gridLayout = new QGridLayout(top_frame);
        gridLayout->setSpacing(6);
        gridLayout->setContentsMargins(11, 11, 11, 11);
        gridLayout->setObjectName(QStringLiteral("gridLayout"));
        horizontalSpacer = new QSpacerItem(30, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);

        gridLayout->addItem(horizontalSpacer, 0, 2, 1, 1);

        progressBar_2 = new QProgressBar(top_frame);
        progressBar_2->setObjectName(QStringLiteral("progressBar_2"));
        progressBar_2->setValue(24);

        gridLayout->addWidget(progressBar_2, 2, 3, 1, 1);

        progressBar_4 = new QProgressBar(top_frame);
        progressBar_4->setObjectName(QStringLiteral("progressBar_4"));
        progressBar_4->setValue(24);

        gridLayout->addWidget(progressBar_4, 2, 5, 1, 1);

        verticalSpacer = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed);

        gridLayout->addItem(verticalSpacer, 1, 1, 1, 1);

        horizontalSpacer_2 = new QSpacerItem(10, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);

        gridLayout->addItem(horizontalSpacer_2, 0, 4, 1, 1);

        pushButton_1 = new QPushButton(top_frame);
        pushButton_1->setObjectName(QStringLiteral("pushButton_1"));

        gridLayout->addWidget(pushButton_1, 0, 0, 1, 1);

        progressBar_1 = new QProgressBar(top_frame);
        progressBar_1->setObjectName(QStringLiteral("progressBar_1"));
        progressBar_1->setValue(24);

        gridLayout->addWidget(progressBar_1, 0, 3, 1, 1);

        pushButton_2 = new QPushButton(top_frame);
        pushButton_2->setObjectName(QStringLiteral("pushButton_2"));

        gridLayout->addWidget(pushButton_2, 0, 1, 1, 1);

        pushButton_3 = new QPushButton(top_frame);
        pushButton_3->setObjectName(QStringLiteral("pushButton_3"));

        gridLayout->addWidget(pushButton_3, 2, 0, 1, 1);

        progressBar_3 = new QProgressBar(top_frame);
        progressBar_3->setObjectName(QStringLiteral("progressBar_3"));
        progressBar_3->setValue(24);

        gridLayout->addWidget(progressBar_3, 0, 5, 1, 1);

        pushButton_4 = new QPushButton(top_frame);
        pushButton_4->setObjectName(QStringLiteral("pushButton_4"));

        gridLayout->addWidget(pushButton_4, 2, 1, 1, 1);


        verticalLayout_3->addWidget(top_frame);

        bottom_frame = new QFrame(centralWidget);
        bottom_frame->setObjectName(QStringLiteral("bottom_frame"));
        bottom_frame->setFrameShape(QFrame::StyledPanel);
        bottom_frame->setFrameShadow(QFrame::Raised);
        horizontalLayout = new QHBoxLayout(bottom_frame);
        horizontalLayout->setSpacing(6);
        horizontalLayout->setContentsMargins(11, 11, 11, 11);
        horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
        frame = new QFrame(bottom_frame);
        frame->setObjectName(QStringLiteral("frame"));
        frame->setFrameShape(QFrame::StyledPanel);
        frame->setFrameShadow(QFrame::Raised);
        formLayout = new QFormLayout(frame);
        formLayout->setSpacing(6);
        formLayout->setContentsMargins(11, 11, 11, 11);
        formLayout->setObjectName(QStringLiteral("formLayout"));
        label_1 = new QLabel(frame);
        label_1->setObjectName(QStringLiteral("label_1"));

        formLayout->setWidget(0, QFormLayout::LabelRole, label_1);

        label_2 = new QLabel(frame);
        label_2->setObjectName(QStringLiteral("label_2"));

        formLayout->setWidget(1, QFormLayout::LabelRole, label_2);

        verticalSpacer_2 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);

        formLayout->setItem(2, QFormLayout::LabelRole, verticalSpacer_2);

        lineEdit = new QLineEdit(frame);
        lineEdit->setObjectName(QStringLiteral("lineEdit"));
        QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding);
        sizePolicy1.setHorizontalStretch(0);
        sizePolicy1.setVerticalStretch(0);
        sizePolicy1.setHeightForWidth(lineEdit->sizePolicy().hasHeightForWidth());
        lineEdit->setSizePolicy(sizePolicy1);

        formLayout->setWidget(3, QFormLayout::SpanningRole, lineEdit);

        lineEdit_2 = new QLineEdit(frame);
        lineEdit_2->setObjectName(QStringLiteral("lineEdit_2"));
        sizePolicy1.setHeightForWidth(lineEdit_2->sizePolicy().hasHeightForWidth());
        lineEdit_2->setSizePolicy(sizePolicy1);

        formLayout->setWidget(4, QFormLayout::LabelRole, lineEdit_2);


        horizontalLayout->addWidget(frame);

        frame_2 = new QFrame(bottom_frame);
        frame_2->setObjectName(QStringLiteral("frame_2"));
        frame_2->setFrameShape(QFrame::StyledPanel);
        frame_2->setFrameShadow(QFrame::Raised);
        horizontalLayout_2 = new QHBoxLayout(frame_2);
        horizontalLayout_2->setSpacing(6);
        horizontalLayout_2->setContentsMargins(11, 11, 11, 11);
        horizontalLayout_2->setObjectName(QStringLiteral("horizontalLayout_2"));
        label_3 = new QLabel(frame_2);
        label_3->setObjectName(QStringLiteral("label_3"));

        horizontalLayout_2->addWidget(label_3);

        horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);

        horizontalLayout_2->addItem(horizontalSpacer_3);

        label_4 = new QLabel(frame_2);
        label_4->setObjectName(QStringLiteral("label_4"));

        horizontalLayout_2->addWidget(label_4);

        frame->raise();
        frame->raise();
        label_3->raise();
        label_4->raise();

        horizontalLayout->addWidget(frame_2);


        verticalLayout_3->addWidget(bottom_frame);

        MainWindow->setCentralWidget(centralWidget);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));
        pushButton_1->setText(QApplication::translate("MainWindow", "PushButton_1", 0));
        pushButton_2->setText(QApplication::translate("MainWindow", "PushButton_2", 0));
        pushButton_3->setText(QApplication::translate("MainWindow", "PushButton_3", 0));
        pushButton_4->setText(QApplication::translate("MainWindow", "PushButton_4", 0));
        label_1->setText(QApplication::translate("MainWindow", "TextLabel_1", 0));
        label_2->setText(QApplication::translate("MainWindow", "TextLabel_2", 0));
        label_3->setText(QApplication::translate("MainWindow", "TextLabel_3", 0));
        label_4->setText(QApplication::translate("MainWindow", "TextLabel_4", 0));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

以下是您可能希望执行的转换。我已经包含了您的代码的缩短版本来进行演示。

  1. 从...开始uic output.

    class Ui_MainWindow
    {
    public:
        QWidget *centralWidget;
        QVBoxLayout *verticalLayout_3;
        QFrame *top_frame;
    };
    
  2. 将所有成员Ui_Foo into Foo本身,保留它们的顺序。

    class MainWindow : public QMainWindow
    {
        QWidget *centralWidget;
        QVBoxLayout *verticalLayout_3;
        QFrame *top_frame;
    };
    
  3. 将成员类型从指针更改为值。

    class MainWindow : public QMainWindow
    {
        QWidget centralWidget;
        QVBoxLayout verticalLayout_3;
        QFrame top_frame;
        ...
    };
    
  4. 通过为它们提供它们所作用的小部件来初始化类声明中的布局。这使得用户界面的结构从标题本身就变得显而易见:

    class MainWindow : public QMainWindow
    {
        QWidget centralWidget;
        QVBoxLayout verticalLayout_3{&centralWidget};
        QFrame top_frame;
        ...
    };
    
  5. 添加代码来自setupUi到构造函数的主体,适当地更改它以作用于值,而不是指针:

    MainWindow::MainWindow(QWidget * parent) : QWidget{parent}
    {
        setObjectName(QStringLiteral("MainWindow"));
        resize(878, 632);
        centralWidget.setObjectName(QStringLiteral("centralWidget"));
        verticalLayout_3.setSpacing(6);
        verticalLayout_3.setContentsMargins(11, 11, 11, 11);
        verticalLayout_3.setObjectName(QStringLiteral("verticalLayout_3"));
        top_frame.setObjectName(QStringLiteral("top_frame"));
        QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(0);
        sizePolicy.setHeightForWidth(top_frame->sizePolicy().hasHeightForWidth());
        top_frame.setSizePolicy(sizePolicy);
        top_frame.setFrameShape(QFrame::StyledPanel);
        top_frame.setFrameShadow(QFrame::Raised);
        ...
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式设计 GUI - 嵌套布局和多个小部件 (Qt) 的良好实践 的相关文章

  • 获取小部件的背景颜色 - 真的

    我无法获取小部件的实际背景颜色 在我的特殊情况下 我在使用 QTabWidget 中的小部件时遇到问题 这是在Windows7上 因此 经典的小部件有一些灰色背景 而选项卡内的小部件通常用白色背景绘制 I tried def bgcolor
  • QT 中的应用程序->处理消息?

    在 Borland 6 中 我经常使用它来解除程序操作的卡住 Application gt Processmessages 现在 对于 QT 4 8 1 我在这个外国 对我来说 QT 文档中找不到 谁能帮我 在 Qt 中 您可以使用静态函数
  • [本机]:在Qt for Android中使用Java函数和第3方库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近我用qt写了一个android应用程序 但我有一个很大的问题 我可以使用 调用一些原生的android API 比如调用特殊的activit
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • qt项目如何设置安装路径

    我正在寻找与 qmake configure prefix 等效的内容 基本上 我想覆盖默认的安装 部署目录 这是如何用命令行 qmake 指定的 我还使用 QtCreator 构建了很多 gui 项目 并且我想知道如何在 QtCreato
  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

    有没有一种安全的方法可以在不调用 QApplication exec 的情况下使用 Qt 我有许多不同的对象正在对多个资源执行长期进程 至少其中一个正在与 Web 应用程序服务器进行通信 我正在制作一个 GUI 应用程序 提示用户在正确的时
  • QT/QML Android App,点击通知栏时打开应用程序

    我为 Android 应用程序制作了一个 QT 当我单击平板电脑中上面看到的按钮通知栏时 但是 如果单击通知 我的应用程序将打开 聚焦 不知道 并显示黑色窗口 简单来说怎么做呢 我的代码是 package org ays operation
  • Qt中如何获取鼠标在屏幕上的位置?

    我想获取屏幕上的鼠标坐标 我怎样才能在 Qt 中做到这一点 在 Windows 上 使用 C 我正在做类似答案中建议的事情对于这个问题 https stackoverflow com q 11737665 1420197 正如文档所述 QC
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • Qt - 如何粘合两个窗口并将它们移动在一起?

    就像qmmp Qt 音乐播放器ui设计一样 这两个或三个窗口实际上在同一个窗口中 因为只有一个dock图标 并且这些窗口可以一起移动并相互附着 我看了源码 好像有用QDockWidget 但我真的不知道如何获得它的细节 当您手动移动辅助窗口
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 向 Qt 样式表添加特异性时丢失样式

    这是我的代码 const QString STYLE SHEET background color rgba x x x y border 1px solid gray border radius 0px border top 1px so
  • Qt 文件对话框默认后缀不起作用

    我将以下代码用于 QtQuick Dialogs 1 3 和 Qt 5 10 0 下 filedialog 的新属性 我使用 Qt Creator 5 10 默认套件构建它 import QtQuick 2 10 import QtQuic
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 重定向 python 交互式帮助()

    我正在为使用 Qt 的应用程序开发交互式 python shell 但是我似乎无法获得重定向的交互式帮助 我的 python 代码中有这个 class OutputCatcher def init self self data def wr
  • Qt:测量事件处理时间

    我想测量我的应用程序中的哪些事件在主线程中需要很长时间才能执行 阻塞 GUI 或者至少是否有任何事件花费的时间超过 比如说 10 毫秒 显然 我对需要很长时间的任务使用线程和并发 但有时很难在其他线程中放入的内容和可以保留在 GUI 中的内
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr

随机推荐

  • 如何检查第一个数据帧中的值是否包含或与另一个数据帧中的值匹配

    我在用R处理一些数据框 我的问题与如何检查第一个数据帧中的变量值是否与另一个数据帧中的值匹配有关 这场比赛与其他比赛有很大不同merge or join 我将介绍我的数据框 dput 最后 我的第一个数据框是df1 它包含变量name我想将
  • 使用 AngularJS 在 Chrome 中中断变量更改

    如同this https stackoverflow com questions 11618278 how to break on property change in chrome问题 我想打破 Chrome 中的变量更改 但是 我使用的
  • 使用 chrome.history.deleteRange 未完全删除历史记录

    我写了一个小扩展 使用deleteRange from chrome historyAPI 用于删除开始时间戳和结束时间戳之间的部分浏览器历史记录 chrome history deleteRange startTime startTime
  • 使用C#正则表达式替换XML元素内容

    我正在编写一些处理记录 xml 数据的代码 并且我希望能够替换文档中某些元素 例如密码 的内容 我不想序列化和解析文档 因为我的代码将处理各种模式 输入文档示例 doc 1
  • 虚拟主机无法在 zend 框架中工作

    以下是我在 etc apache2 sites available 中的虚拟主机
  • 实体框架 6.1:字典中不存在给定的键

    我有一个带有一些关系的表 程序工作正常 直到我在该表和customer表 ddlPermissionCode表 第一表 如下 CREATE TABLE dbo PermissionCode Id int NOT NULL IDENTITY
  • Flutter 在选择时更改 TabItem 背景

    我想问一下 选择选项卡时如何更改选项卡项目背景颜色 抱歉 我是颤振的新手 使用底部标签栏还是标签栏更好 像这样 我的代码 bottomNavigationBar new TabBar tabs Tab icon new Icon Icons
  • 如何找到二维数组JAVA中元素的平均值? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要以下程序的帮助 编写一个方法 将二维双精度数组作为输入参数并返回数组元素的平均值 谁能告诉我该怎么做 我当前的代码 public
  • 通过 Slack API 发送命令

    有没有办法以编程方式发送command通过 API 到 Slack 我已成功发布消息 var postingResponse client UploadValues https slack com api chat postMessage
  • Android GPS 的准确度如何? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我好像在某处读过Android的GPS精度约为10厘米 任何人都可以验证或更正这个吗 原因是我正在尝试开发的应用程序会跟踪用户访问过的位置 这将极大地
  • 谷歌地图圆圈与标签

    我使用 google 地图 api 创建了地图视图 通过使用 google maps Circle 圆圈在地图上打印 将标记更改为圆圈 没有任何问题 但我无法在其中添加标签或文本 我该如何解决这个问题 这是我用来打印圆圈的代码 functi
  • 如何使用 fetch api 及其 javascript 加载 html 页面?

    我正在尝试使用 fetch API 加载 HTML 页面及其 JavaScript 脚本 我可以使用 ajax 和 JQuerySee here https stackoverflow com questions 50847274 fetc
  • NSUTF8StringEncoding 导致文件在 TextEdit/Pages 中渲染不正确,但在 BBEdit/vi 中则不会

    我遇到了一个有点奇怪的问题 每当我在 iOS 应用程序中创建新的文本文件时 我都会将其编码设置为NSUTF8StringEncoding 如果我编辑文件并输入任何带变音符号的字符并保存更改 则变音符号在某些应用程序 如 BBEdit Tex
  • 具有核心动画页面和长列表的聚合物芯片到卡图案

    一般来说 我发现很难使用core animated pages当我有一个滚动页面的很长列表时 聚合物元素可实现芯片列表到卡片类型模式 我认为困难在于 一旦过渡完成 隐藏部分就会从布局中取出 我很难找到解决这个问题的方法 简单的插图 JSFi
  • “Josephus-p‌r‌o‌b‌l‌e‌m” 在 python 中使用列表

    我想知道是否可以使用 python 中的列表来解决约瑟夫问题 简单来说 约瑟夫问题就是在圆形排列中找到一个位置 如果使用事先已知的跳过参数来处理执行 那么该位置将是安全的 例如 给定一个圆形排列 例如 1 2 3 4 5 6 7 并且ski
  • 无法使用 mailto uri 创建具有多个收件人的新邮件

    我正在使用创建一个Windows 8 1 应用商店 in WinRT 我无法通过用逗号或分号分隔每封电子邮件来使用 mailto uri 创建具有多个收件人的新邮件 两者都会给我相同的错误 Invalid URI The hostname
  • JUnit4 根据自定义 java 注释跳过测试

    我希望根据我用 Java 创建的自定义注释来执行 JUnit4 测试 此自定义注释的目的是让 JUnit4 注意到 仅当机器的平台与注释中指定的平台匹配时才应运行测试 假设我有以下注释 public interface Annotation
  • 在主程序.cs 文件中运行另一个 .cs 文件

    一般来说 我对编程很陌生 所以我确信这个问题很天真 因此 我编写了一个简单的神奇八球程序 我想转向冒险游戏 但我认为在游戏中包含八球程序会很简洁 就像制作一个控制台菜单 您可以在其中选择任一游戏 所以 我的问题是 我不知道如何将我的八球程序
  • 解析并获取 JSON 数据

    我有一个来自网站的 json 看起来像 Meta Data 1 Information Daily Prices open high low close and Volumes 2 Symbol MSFT 3 Last Refreshed
  • 以编程方式设计 GUI - 嵌套布局和多个小部件 (Qt) 的良好实践

    我有兴趣更好地理解Qt为此我想see 如何仅以编程方式完成嵌套布局和多个小部件 GUI 的相对复杂示例 即不使用 Qt Creator 的设计 我见过几个示例代码仅演示非常简单的布局 并且几乎总是不使用头文件 事实上我见过的大多数例子 du