小编gle*_*nnr的帖子

如何在协议缓冲区中设计未来的额外枚举值?

协议缓冲区的一个吸引人的功能是它允许您扩展消息定义,而不会破坏使用旧定义的代码.在根据文档的枚举的情况下:

具有枚举类型的字段只能将一组指定的常量作为其值(如果您尝试提供不同的值,则解析器会将其视为未知字段)

因此,如果扩展枚举并使用新值,则旧代码中具有该类型的字段将是未定义的,或者具有其默认值(如果有).

什么是处理这个问题的好策略,知道将来enum可能会增加额外的值?

想到的一种方法是定义枚举的"未定义"成员并使其成为默认值,然后旧代码将知道它已被发送无法解释的内容.这是明智的,有没有更好的方法来处理这种情况?

protocol-buffers

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

在Qt中自动调整标签文本的大小 - 奇怪的行为

在Qt中,我有一个复合小部件,它由QBoxLayouts内部的几个QLabel组成.调整窗口小部件的大小时,我希望缩放标签文本以填充标签区域,并且我已在resizeEvent中实现了文本的大小调整.

这有效,但似乎有某种反馈循环发生.复合窗口小部件与其他一些窗口小部件一起放置在QBoxLayout内的主窗口中.当主窗口变小时,复合窗口小部件最初保持其大小,然后以几个步骤(大约10-15)调整到正确的大小.如果文本高度设置为标签高度的大约0.8倍,那么在调整文本大小和包含小部件时,每个步骤都会变大,直到最终应用程序崩溃.

这是实现这种效果的正确方法吗?如果是这样,调整大小的问题可能是什么?

下面是resizeEvent代码.

def resizeEvent(self, evt):
        print("resizeEvent", evt.size().width(), evt.size().height())
        QFrame.resizeEvent(self, evt)

        dataLabels = self.dataPanels.values()

        for label in dataLabels:            
            font = label.font()
            h = label.height()
            h2 = h * 0.8
            font.setPixelSize(h2)
            label.setFont(font)
Run Code Online (Sandbox Code Playgroud)

(使用PyQt4 4.8,Qt 4.7.4,Win 7和OSX 10.6)

qt resize pyqt

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

重命名CPack的输出

我想重命名CPack(v2.8.7)生成的安装程序文件,以包含从版本控制系统在构建时获得的版本号.看来这不能通过设置CPACK_*变量来完成,因为这发生在"cmake"时间.

我希望能够做的是运行"(n)make package"并创建安装程序文件,而不需要进一步的命令.我所知道的两种可能的方法是在构建时操作CPack文件名变量并重命名CPack的最终输出.

如果在CMakeLists.txt文件中使用"include(CPack)",那么看起来CPack总是最后运行,并且您不能拥有构建后命令.这个邮件列表消息表明可以编写自定义目标来运行CPack,但是我无法在不创建无限递归的情况下弄清楚如何做到这一点.

如何才能做到这一点?

cmake cpack

6
推荐指数
2
解决办法
3308
查看次数

QAction的所有权

将QAction*添加到负责删除QAction*对象的QMenu时?我在QMenu或QAction的文档中找不到它.

void MyClass::contextMenuEvent(QContextMenuEvent *evt)
{
    QMenu menu(this);
    QAction *a = new QAction(tr("Some action"), this);
    menu.addAction(a); // who owns a?
    menu.exec(evt->globalPos());
}
Run Code Online (Sandbox Code Playgroud)

Qt的菜单例如不会删除任何它创建的行动,所以我认为QMenu采取的QAction的所有权.那是对的吗?

qt ownership-semantics qmenu

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

QML TextField如何大写文本

在QML中,我如何有一个文本输入框,该框自动将输入的文本转换为全部大写?以下内容不起作用:

    TextField {
        id: myfield
        objectName: "myfield"
        ...
        font.pixelSize: 20
        font.capitalization: Font.AllUpperCase
        ....
    }
Run Code Online (Sandbox Code Playgroud)

capitalize capitalization qml

4
推荐指数
1
解决办法
2307
查看次数

boost::python 导出自定义异常并继承自 Python 的异常

boost::python 导出自定义异常的公认答案显示了如何从 C++ 导出自定义异常类,而Boost.Python 自定义异常类显示了如何导出从 Python 的异常继承的异常类。我怎样才能做到这两点?即公开一个异常类,该类具有用于检索信息的自定义方法,并且该类也可以从 Python 的异常派生。

c++ exception boost-python

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

在Phonegap Build中使用config.xml编辑Entitlements.plist文件

我正在尝试通过Phonegap构建使用Apple Pay cordova插件。这是我在配置文件中的条目:

     <plugin name="cordova-plugin-applepay-stripe" source="npm">
<param name="STRIPE_TEST_PUBLISHABLE_KEY" value="xxxxxxxx" />
<param name="STRIPE_LIVE_PUBLISHABLE_KEY" value="xxxxxxxxx" />
<param name="APPLE_MERCHANT_IDENTIFIER" value="merchant.etc.etc" />
</plugin>
Run Code Online (Sandbox Code Playgroud)

该插件安装正确,但是由于我没有在PC上启用Xcode中的Apply Pay权利,所以该插件无法正常工作。

我知道您可以像在这里一样直接从phonegap构建config.xml文件中编辑plist文件:

<gap:config-file platform="ios" parent="NSPhotoLibraryUsageDescription" overwrite="true">
<string>We are using the Photo Library for PayPal</string>...
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,究竟如何编辑Entitlements.plist文件,以便可以启用ApplePay并添加我的商人ID?

我尝试了以下方法:

  <config-file platform="ios" target="*-Entitlements.plist" parent="com.apple.developer.in-app-payments">  
        <array>
            <string>merchant.etc.etc/string>
        </array>
</config-file>  
Run Code Online (Sandbox Code Playgroud)

但这没有用。任何帮助,将不胜感激!

plist entitlements cordova phonegap-build phonegap

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