小编Nar*_*yan的帖子

C++如何对负数进行按位"或"操作?

当我给变量这样的值:e = 17|-15;,我在编译后得到-15作为答案.我无法理解c ++的算术运算.它如何对负小数执行逐位OR运算?

c++ bitwise-operators bitwise-or

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

如何在 Qt5 中将自定义小部件与模型/视图/委托一起使用?

在我当前使用的专有代码库中,有一个自定义列表视图(派生形式QListView)。

目前,当大量项目(> 10000)导致主线程冻结时,会出现问题。视图中的每个项目都是在 QtDesigner 中设计的自定义小部件。

为了渲染每一行,我们使用setIndexWidget,它在QAbstractItemModel::rowsInserted信号上调用。对于每个插入的行,为每个索引设置从first到自定义小部件。last

我尝试将此代码移植到 use QStyledItemDelegate,因为从实际模型中断开项目小部件似乎可以解决渲染缓慢的问题。

在这种情况下,Qt5 可以根据需要延迟渲染视图中的项目。在显示列表之前,我们不需要创建每个用于查看的小部件。

我使用派生自QStyledItemDelegate. 我在构造函数中创建一个列表项小部件,然后像这样覆盖绘制事件。

    void paint(QPainter *painter, const QStyleOptionViewItem &option,const QModelIndex &index) const override {
        auto baseWid = getBaseWidget(); // Get's list item widget pointer
        setSubEditorData(baseWid,index); // Set's it's state to display current item
        baseWid->resize(option.rect.size());
        QPixmap pixmap(option.rect.size());
        baseWid->render(&pixmap);
        painter->drawPixmap(option.rect, pixmap);
    }
Run Code Online (Sandbox Code Playgroud)

这对于静态内容来说已经足够了,但是我的小部件有复选框并且可以选择。

我真的不明白如何使其具有交互性,同时保留代表提供的好处(按需渲染等)。

我的问题是如何让委托处理用户事件?就像鼠标点击一样,选择也会发生变化。

涵盖委托的 Qt5 示例太简单了,我不明白如何使用委托绘制自定义小部件。

c++ qt qt5 qtwidgets

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

x86 汇编,堆栈推送指令

我刚刚发现 push 指令可以有一个立即数 byte 、 word 、 dword 参数,并且每个参数都有不同的操作码。我正在阅读的书中没有示例,所以我不明白汇编程序如何区分这三种类型。例如,如果我编写push 12h汇编器将如何解释它以及堆栈上实际会发生什么?

x86 assembly callstack machine-code opcode

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

Linux 中的信号处理

我想了解信号处理的工作原理,因此我决定以另一种方式处理除以零。程序应请求输入,直到不发生被零除为止。但是,我的处理程序在第一次跳转后被忽略,并且除法由系统处理。为什么会出现这种情况?

#include <stdio.h>
#include <signal.h>
#include <setjmp.h>

jmp_buf env;

void handler(int sig) {
    printf("Invalid input , try again\n");
    longjmp(env , 1);
}

int main() {
    signal(SIGFPE , handler);
    int x , y;
    setjmp(env);
    scanf("%d%d" , &x , &y);
    printf("%d\n" , x / y);
}
Run Code Online (Sandbox Code Playgroud)

c linux signals

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

为什么c ++会返回此结果

当我想计算0的补码时,我得到-1作为答案.我认为它应该是一个大数字,因为它是11111111(我不知道我刚用8写的多少位)二进制数系统.

c++

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