小编Tim*_*ann的帖子

C++保留符号作为C变量名

我在C++项目中使用外部C库.

标头包含一个带有名为的变量的结构class:

#ifdef __cplusplus
extern "C" {
#endif

struct something_t {
    ...
    sometype class;
};


#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)

g ++不喜欢这个并抱怨"错误:'之前的预期标识符';' 令牌".

我有什么选择?

  1. 我可以重命名class,但这很麻烦,打破了上游兼容性.
  2. 我可以要求上游项目重命名变量,但这可能很难.
  3. 我可以class使用预处理器在标题中重新定义:#define class class_是否有任何副作用?
  4. 还有其他建议吗?

处理这种情况的最佳方法是什么?

结果:基于对选项2的普遍偏好,我最终选择在上游库中启动重命名.

c c++

14
推荐指数
1
解决办法
930
查看次数

将py.test与已编译的库代码一起使用

我有一个python库,具有以下存储库结构:

repobase
 |- mylibrary
 |  |- __init__.py
 |- tests
    |- test_mylibrary.py
Run Code Online (Sandbox Code Playgroud)

到目前为止,运行测试可以通过调用py.testrepobase目录来完成.然后import mylibrarytest_mylibrary.py中使用repobase/mylibrary中的本地代码.

现在,我已经扩展了库以使用编译代码.因此,repobase/mylibrary的源代码本身不起作用.我必须做一个setup.py build.这将创建repobase/build/lib.linux-x86_64-2.7/mylibrary.

是否有合理的方法使py.test使用此目录导入mylibrary?鉴于这些限制:

  1. 我不想sys.pathtest_mylibrary.py中包含任何/ import魔法,因为这可能会破坏其他环境中的测试.

  2. 我不想放弃py.testrepobase运行的可能性.因此修改PYTHONPATH没有用,因为它.仍然是第一个sys.path.因此repobase/mylibraryrepobase/build/lib.linux-x86_64-2.7/mylibrary更受青睐.

如果没有,那么测试需要构建的python库的标准方法是什么?

python build pytest

11
推荐指数
1
解决办法
834
查看次数

测试默认构造的 QFileInfo

我想使用 type 的可选参数QFileInfo。测试调用者是否提供了值或是否使用了默认值的规范方法是什么?

// declaration
void foo(QFileInfo fi = QFileInfo());

// definition
void foo(QFileInfo fi)
{
    if ( /* what to test for: "is default" */ ) {

    }
}
Run Code Online (Sandbox Code Playgroud)

通常默认构造的 Qt 对象具有类似isValid()或 的内容isEmpty()。然而,在QFileInfo.

一种选择是fi.filePath().isEmpty()。有没有更好/更简单的东西?

c++ qt

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

Qt - 如何为菜单和小部件中的操作设置快捷方式上下文

我有一些附加到主菜单栏的全局菜单操作(下例中的“缩放”)。此外,我还附加了某些小部件的操作(下例中的“Zoom2”)。

我想对这两个操作使用相同的快捷方式。它应该像这样工作:

  • 如果textEdit2是焦点,它的动作应该消耗快捷方式(即zoom2()应该被触发)。
  • 否则,菜单快捷方式应该被激活,触发zoomGlobal()

下面的当前示例尚未运行:如果textEdit2获得焦点,Qt 会发出通知QAction::eventFilter: Ambiguous shortcut overload: Ctrl++并且不执行任何操作。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QAction *act = menuBar()->addAction("Zoom");
    act->setShortcut(QKeySequence("Ctrl++"));
    connect(act, SIGNAL(triggered(bool)), this, SLOT(zoomGlobal()));

    setCentralWidget(new QWidget());
    QVBoxLayout *layout = new QVBoxLayout();
    centralWidget()->setLayout(layout);
    QTextEdit *textEdit1 = new QTextEdit();
    layout->addWidget(textEdit1);

    QTextEdit *textEdit2 = new QTextEdit();
    layout->addWidget(textEdit2);
    act = new QAction("Zoom2");
    act->setShortcut(QKeySequence("Ctrl++"));
    act->setShortcutContext(Qt::WidgetShortcut);
    connect(act, SIGNAL(triggered(bool)), this, SLOT(zoom2()));
    textEdit2->addAction(act);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让集中的小部件窃取和使用快捷方式,无论是否存在另一个带有上下文的快捷方式WindowShortcutApplicationShortcut

当然,可以在 中编写所有内容zoomGlobal(),检查哪个小部件处于活动状态并委托其操作。但是,如果您有很多操作和小部件,那就相当麻烦了。我希望能够添加/删除/更改小部件,textEdit2而不需要调整 …

qt shortcut

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

如果 python 不工作,则在 os.mkdir 下

我有下面的代码,但它os.mkdir不适用于我的。编译不会返回任何错误,但运行代码不会创建文件夹。

def folder():
    timenow = datetime.now().strftime('%Y-%m-%d_%H%M%S')
    folderpath = os.path.join(currentpath,"folder",str(timenow))
    if os.path.exists(folderpath) == False:
        os.mkdir(folderpath)
    return
Run Code Online (Sandbox Code Playgroud)

python python-os

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

在 QToolBar 的工具提示中显示快捷方式

我已经QActions添加到QToolBarusing addAction().

我希望工具栏按钮工具提示显示快捷方式。例如复制(Ctrl+C)。当然,我可以静态设置

action->setTooltip(QString("%1 (%2)").arg(action.toolTip(), action->shortcut().toString(QKeySequence::NativeText)));
Run Code Online (Sandbox Code Playgroud)

然而,这非常麻烦,因为有很多操作,并且用户可以修改快捷方式,因此我必须跟踪并相应更新。如果我可以通过类似于http://doc.qt.io/qt-5/qtwidgets-widgets-tooltips-example.htmlQToolBar的子类来简单地修改工具提示行为,那就更好了。QToolBar

不幸的是,事情没那么简单。工具提示不是由其本身生成的QToolBar,而是显然是由QToolButton使用时在内部创建的addAction()。所以理想情况下我会注入我自己的QToolButton. 但这似乎是不可能的,因为工具按钮的实际实例化是在我无法访问的私有 QToolBarLayout 内完成的。

有什么想法如何解决这个问题吗?

qt tooltip qtoolbar

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

标签 统计

qt ×3

c++ ×2

python ×2

build ×1

c ×1

pytest ×1

python-os ×1

qtoolbar ×1

shortcut ×1

tooltip ×1