• 5382阅读
  • 13回复

[提问]QTablewidget,快让我崩溃了 [复制链接]

上一主题 下一主题
离线foxgod
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-29
我写了一个类,继承于QTablewidget,我初始化他,
this->setRowCount(100);    this->setColumnCount(100);    this->setGeometry(430,75,1490,1005);    this->setGridStyle(Qt::SolidLine);    this->setColumnWidth(0,50);//设置第一列的列宽    this->setColumnWidth(1,50);//设置第二列的列宽    this->setColumnWidth(2,50);//设置第三列的列宽    this->setColumnWidth(3,30);//设置第四列的列宽    this->setColumnWidth(4,250);//设置第五列的列宽    this->setColumnWidth(5,250);//设置第五列的列宽    this->setColumnWidth(6,250);//设置第五列的列宽    this->setColumnWidth(7,250);//设置第五列的列宽    this->setColumnWidth(8,220);//设置第五列的列宽    this->setColumnWidth(9,250);//设置第五列的列宽    this->setColumnWidth(10,250);//设置第五列的列宽    this->setColumnWidth(11,250);//设置第五列的列宽    this->setColumnWidth(12,250);//设置第五列的列宽    this->setColumnWidth(13,250);//设置第五列的列宽    this->setColumnWidth(14,250);//设置第五列的列宽    QStringList header;    header<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"生日";    this->setHorizontalHeaderLabels(header);    this->verticalHeader()->setVisible(false);   // this->setFocus();//    this->setModel(Qt::WindowModal); //   this->setFocusPolicy(Qt::WheelFocus);    this->viewport()->installEventFilter(this);    this->setItem(1, 1, new QTableWidgetItem("1"));    this->setItem(1, 0, new QTableWidgetItem("2"));    this->setItem(0, 1, new QTableWidgetItem("3"));    this->setItem(0, 0, new QTableWidgetItem("4"));    this->setItem(0, 2, new QTableWidgetItem("F"));    this->setItem(1, 2, new QTableWidgetItem("F"));    this->setItem(2, 0, new QTableWidgetItem("7"));    this->setItem(2, 1, new QTableWidgetItem("8"));    this->setItem(2, 2, new QTableWidgetItem("M"));    this->setItem(3, 0, new QTableWidgetItem("2"));    this->setItem(3, 1, new QTableWidgetItem("7"));    this->setItem(3, 2, new QTableWidgetItem("M"));    this->setItem(4, 0, new QTableWidgetItem("2"));    this->setItem(4, 1, new QTableWidgetItem("1"));    this->setItem(4, 2, new QTableWidgetItem("F"));我编译debug版本的时候,是正常的,可是我编译release版本的时候,行和列没有了,item交替的背景颜色 也没有了。但是表头的颜色和文字,还有滚动条的背景颜色是存在的。不知道是怎么回事。
testtable.rar (7 K) 下载次数:3


离线ffii4455

只看该作者 1楼 发表于: 2013-03-29
谁把你这种格式的帖子看完谁崩溃。
离线jdwx

只看该作者 2楼 发表于: 2013-03-29
回 楼主(foxgod) 的帖子
楼主重新排一下版,这样的帖子,谁看谁崩溃。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线XChinux

只看该作者 3楼 发表于: 2013-03-29
楼主的帖的代码要让我们崩溃了
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线realfan

只看该作者 4楼 发表于: 2013-03-29
先大概帮LZ排一下版吧
  1.     this->setRowCount(100);
  2.     this->setColumnCount(100);
  3.     this->setGeometry(430,75,1490,1005);
  4.     this->setGridStyle(Qt::SolidLine);
  5.     this->setColumnWidth(0,50);//设置第一列的列宽
  6.     this->setColumnWidth(1,50);//设置第二列的列宽
  7.     this->setColumnWidth(2,50);//设置第三列的列宽
  8.     this->setColumnWidth(3,30);//设置第四列的列宽
  9.     this->setColumnWidth(4,250);//设置第五列的列宽
  10.     this->setColumnWidth(5,250);//设置第五列的列宽
  11.     this->setColumnWidth(6,250);//设置第五列的列宽
  12.     this->setColumnWidth(7,250);//设置第五列的列宽
  13.     this->setColumnWidth(8,220);//设置第五列的列宽
  14.     this->setColumnWidth(9,250);//设置第五列的列宽
  15.     this->setColumnWidth(10,250);//设置第五列的列宽
  16.     this->setColumnWidth(11,250);//设置第五列的列宽
  17.     this->setColumnWidth(12,250);//设置第五列的列宽
  18.     this->setColumnWidth(13,250);//设置第五列的列宽
  19.     this->setColumnWidth(14,250);//设置第五列的列宽
  20.     QStringList header;
  21.     header<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"生日";
  22.     this->setHorizontalHeaderLabels(header);
  23.     this->verticalHeader()->setVisible(false);
  24.     // this->setFocus();//
  25.     this->setModel(Qt::WindowModal); //
  26.     this->setFocusPolicy(Qt::WheelFocus);
  27.     this->viewport()->installEventFilter(this);
  28.     this->setItem(1, 1, new QTableWidgetItem("1"));
  29.     this->setItem(1, 0, new QTableWidgetItem("2"));
  30.     this->setItem(0, 1, new QTableWidgetItem("3"));
  31.     this->setItem(0, 0, new QTableWidgetItem("4"));
  32.     this->setItem(0, 2, new QTableWidgetItem("F"));
  33.     this->setItem(1, 2, new QTableWidgetItem("F"));
  34.     this->setItem(2, 0, new QTableWidgetItem("7"));
  35.     this->setItem(2, 1, new QTableWidgetItem("8"));
  36.     this->setItem(2, 2, new QTableWidgetItem("M"));
  37.     this->setItem(3, 0, new QTableWidgetItem("2"));
  38.     this->setItem(3, 1, new QTableWidgetItem("7"));
  39.     this->setItem(3, 2, new QTableWidgetItem("M"));
  40.     this->setItem(4, 0, new QTableWidgetItem("2"));
  41.     this->setItem(4, 1, new QTableWidgetItem("1"));
  42.     this->setItem(4, 2, new QTableWidgetItem("F"));



离线realfan

只看该作者 5楼 发表于: 2013-03-29

写代码给LZ个建议,那些大量重复的代码,数据和语句可以适当分离一下
如:
  1. QList<int> lstWidths;
  2.     lstWidths << 50 << 50 << 30 << 250 <<......<< 250;
  3.     for(int i = 0; i < lstWidths.size(); ++i)
  4.     {
  5.     this->setColumnWidth(i, lstWidths.at(i));
  6.     }


离线foxgod

只看该作者 6楼 发表于: 2013-03-30
回 5楼(realfan) 的帖子
不明白debug和release怎么会不一样呢,
离线foxgod

只看该作者 7楼 发表于: 2013-03-30
回 3楼(XChinux) 的帖子
不明白debug和release怎么会不一样呢,其他的换肤都实现了,可是就是item的行和列,还有交替背景色,网格线没实现
离线foxgod

只看该作者 8楼 发表于: 2013-03-30
回 2楼(jdwx) 的帖子
我以前编译的debug和release肯定是一样的,界面也是一样的,不知道为什么这次不一样,我要怎么样检查错误呢,我debug的界面和我写的是一样的,我release的其他的都是一样的,就是tablewidget里面没有行和列了,也没有了item网格线和交替颜色。表头呀滚动条都在呢,换肤也成功了
离线jdwx

只看该作者 9楼 发表于: 2013-03-30
回 8楼(foxgod) 的帖子
将编译出来的文件统统清除,包括makefile,在编译,看看效果。
如果是影子编译,直接把影子目录删除,再编译。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线foxgod

只看该作者 10楼 发表于: 2013-03-30
回 9楼(jdwx) 的帖子
我把影子目录删除了,结果还是一样,就是item的行和列出不来,还有交替颜色和背景也出不来。但是debug tablewidget的行和列的时候,是显示的,debugitem(0,0)的text也是显示的,可是在界面上是不显示的。
离线jdwx

只看该作者 11楼 发表于: 2013-03-30
回 10楼(foxgod) 的帖子
可以把代码打个包发上来。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 12楼 发表于: 2013-03-30
回 10楼(foxgod) 的帖子
只要在eventFilter虚函数的最后增加:return QTableWidget::eventFilter(object, event);

需要说明的是修改之前:我这里的效果是debug只有表头,release有整个的列表。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线foxgod

只看该作者 13楼 发表于: 2013-03-30
谢谢斑竹的知道,问题解决的,加上return QTableWidget::eventFilter(object, event);
debug和release效果一样了,加上这句话的意思是什么,另外版主为什么debug效果和我没修改前不一样呢?
快速回复
限100 字节
 
上一个 下一个