• 7417阅读
  • 7回复

[提问]新手求助 [复制链接]

上一主题 下一主题
离线hubinary
 

只看楼主 倒序阅读 楼主  发表于: 2014-12-21
void Table::displaydata(const char data[][9])  //Table:QTableWidget
{
    for(int i=0; i<9; i++)
    {
        for(int j=0; j<9; j++)
        {
            if(data[j] >= 1 && data[j] <= 9)
            {
                char n=data[j];
                item(i,j)->setText(QString::number(data[j])); //!!
                item(i,j)->setFlags(Qt::ItemIsEditable);
            }
            else
            {
                item(i,j)->setText(QString(' '));
            }
        }
    }
}
编译到有叹号的那句时就会出错,不知道什么原因
错误信息:0x647D04BF (Qt5Widgetsd.dll) (Sudoku.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突。
还有发帖的时候为什么字体会变,data[j]变成了data[j]???

离线realfan

只看该作者 1楼 发表于: 2014-12-21
检查一下item(i,j)返回是不是空
检查一下data[j]的访问有没有问题
离线hubinary

只看该作者 2楼 发表于: 2014-12-21
回 realfan 的帖子
我把那步拆开了,n没问题

realfan:
检查一下item(i,j)返回是不是空
检查一下data[j]的访问有没有问题
离线hubinary

只看该作者 3楼 发表于: 2014-12-21
回 realfan 的帖子
realfan:
检查一下item(i,j)返回是不是空
检查一下data[j]的访问有没有问题

接着就出来了这个
离线hubinary

只看该作者 4楼 发表于: 2014-12-21
回 realfan 的帖子
realfan:检查一下item(i,j)返回是不是空
检查一下data[j]的访问有没有问题 (2014-12-21 12:54) 

item(i,j)返回的确是空
离线realfan

只看该作者 5楼 发表于: 2014-12-21
回 hubinary 的帖子
hubinary:item(i,j)返回的确是空 (2014-12-21 13:42) 

要这样用:
QTableWidgetItem* pitem = new QTableWidgetItem(....);
setItem(i,j,pitem);
离线hubinary

只看该作者 6楼 发表于: 2014-12-21
嗯嗯,已经弄好了,原来是我初始QTableWidget时没设置行数和列数,但它是自定义的,我在QT designer里设置了,为什么会不管事呢?
还有,我用item(i,j)->setFlags(Qt::ItemIsEditable);设置了不可编辑,怎么恢复可编辑状态

内容来自[短消息]
离线realfan

只看该作者 7楼 发表于: 2014-12-22
回 hubinary 的帖子
hubinary:嗯嗯,已经弄好了,原来是我初始QTableWidget时没设置行数和列数,但它是自定义的,我在QT designer里设置了,为什么会不管事呢?
还有,我用item(i,j)->setFlags(Qt::ItemIsEditable);设置了不可编辑,怎么恢复可编辑状态
内容来自[短消息]  (2014-12-21 23:41) 

Qt::ItemIsEditable是可编辑吧?
改变状态可以用位操作
Qt::ItemFlags flag = item(i,j)->​flags();
flag |= Qt::ItemIsEditable;   //可编辑
flag &= ~Qt::ItemIsEditable; //不可编辑
item(i,j)->setFlags(flag);
大概是这个思路,你试试行不行吧
快速回复
限100 字节
 
上一个 下一个