小编Don*_*alo的帖子

#pragma在#define中

我正在使用C语言在微控制器中工作.在这个特定的微观中,必须使用#pragma以下方式定义中断:

static void func();
#pragma INTERRUPT func <interrupt_address> <interrupt_category>
static void func() { /* function body */ }
Run Code Online (Sandbox Code Playgroud)

<interrupt_address>是向量表的中断地址.的<interrupt_category>是1或2.例如,以限定在端口的中断0销0:

static void _int_p00();
#pragma INTERRUPT _int_p00 0x10 1
static void _int_p00() { (*isr_p00)(); }
Run Code Online (Sandbox Code Playgroud)

我们在别处定义实际的中断服务程序,并使用函数指针(如isr_p00示例中所示)来执行它们.

如果可以使用宏定义中断将是方便的.我想用以下方式定义一个宏:

#define DECLARE_INTERRUPT(INT_NAME, INT_CAT) \
    static void _int_##INT_NAME(); \
    #pragma INTERRUPT _int_##INT_NAME INT_NAME##_ADDR INT_CAT \
    static void _int_##INT_NAME() { (*isr_##INT_NAME)(); }
Run Code Online (Sandbox Code Playgroud)

编译器抛出以下错误:

Formal parameter missing after '#'
Run Code Online (Sandbox Code Playgroud)

指示以下行:

static void _int_##INT_NAME() { (*isr_##INT_NAME)(); }
Run Code Online (Sandbox Code Playgroud)

我想预处理器指令不能在#define …

c microcontroller c-preprocessor

10
推荐指数
1
解决办法
5506
查看次数

如何从QGraphicsScene中删除所有QGraphicsItem

我写了一个派生类QGraphicsScene.在某一点上,我需要从场景中删除所有项目,我希望物品被物理销毁(析构函数被调用).我尝试了以下方法:

QList<QGraphicsItem*> all = items();
for (int i = 0; i < all.size(); i++)
{
    QGraphicsItem *gi = all[i];
    removeItem(gi);
    delete gi; // warning at this line
}
Run Code Online (Sandbox Code Playgroud)

Qt Creator发出警告:警告:C4150:删除指向不完整类型'QGraphicsItem'的指针; 没有破坏者叫

我不知道为什么会这样.QGraphicsItem有虚拟析构函数所以应该从内存中删除项目.

如果这不是正确的方法,我怎么能删除所有QGraphicsItemQGraphicsScene?请注意,我知道删除场景后,所有项目也将被删除.但我想从场景中删除项目并绘制其他项目.我希望从内存中删除已删除的项目.

c++ qt incomplete-type

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

获取特定用户的CVS历史记录

如何获取特定用户对存储库的提交历史记录?

我可以通过命令行或TortioseCVS访问CVS,因此使用任一方法的解决方案就足够了.

cvs tortoisecvs

9
推荐指数
2
解决办法
9153
查看次数

如何自动计算轴刻度和间隔?

有谁知道我在哪里可以找到给出轴的一组值(日期)的算法我可以计算出合理的比例和刻度间隔?

algorithm graph

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

如何有效地在微控制器中生成随机数?

如何有效地在微控制器中生成随机数?是否有任何一般指导方针或特定的快速方法?

random microcontroller

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

在Qt中为QTableView创建弹出菜单

QTableView在我的程序的主UI中有一个.当用户右键单击表格的单元格时,我想显示弹出菜单,并在从菜单中选择一个选项时采取适当的操作.

我正在使用Qt Creator 1(Qt版本4.5).我怎样才能做到这一点?

c++ qt qtableview

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

安装完成后如何运行批处理脚本?

我正在为一个C#项目的Visual Studio 2008(安装和部署>安装项目)中开发的自定义安装程序工作.我想在安装完成后运行批处理文件(*.bat).我怎样才能做到这一点?

.net c# installer windows-installer visual-studio-2008

7
推荐指数
1
解决办法
8656
查看次数

访问结构中定义的枚举值

如果我有以下内容:

struct LineChartScene::LineChartSceneImpl
{
    enum ContextMenuAction {ShowLabels, ShowPoints, SaveAsImage};
};
Run Code Online (Sandbox Code Playgroud)

如何访问ShowLabels,ShowPoints等外面LineChartScene::LineChartSceneImpl结构?我认为LineChartScene::LineChartSceneImpl::ContextMenuAction::ShowLabels会工作,但事实并非如此.我正在使用C++,Qt Creator 2.2.1.

c++ enums qt struct resolution

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

在fscanf()中使用[]

我有一个包含以下内容的文本文件:

"abc","def","ghi"
Run Code Online (Sandbox Code Playgroud)

以下工作正常读取文件内容:

int main()
{
    char name[1024] = {0};
    FILE *file = fopen("file.txt", "r");

    while(1)
    {
        if (fscanf(file, " %[\",]s ", name) == EOF)
            break;
        if (fscanf(file, " %[a-zA-Z]s ", name) == EOF)
            break;

        printf("%s\n", name);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,以下失败:

int main()
{
    char name[1024] = {0}, garbage[5];
    FILE *file = fopen("file.txt", "r");

    while(1)
    {
        if (fscanf(file, " %[\",]s%[a-zA-Z]s ", garbage, name) == EOF)
            break;

        printf("%s\n", name);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用MSVC++ 08.我错过了什么?我在寻找与单一的解决方案fscanf()中的while循环.

c input scanf

6
推荐指数
1
解决办法
1889
查看次数

在Qt中的单个小部件中添加复选框列表

我正在使用Qt Creator 2.0.1(Qt 4.7).我需要一个可以垂直容纳多个复选框的小部件.用户与其他UI元素交互时,复选框将动态添加到窗口小部件.小部件将具有固定的宽度和高度,因此如果复选框太多,则应显示垂直滚动条.

我想要的是,想象一下QListWidget,其中列表项可以是复选框.

哪个小部件可以让我这样做?

谢谢.

c++ qt

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