【发布时间】:2010-11-02 18:02:21
【问题描述】:
我正在尝试创建 QTableView 的子类,该子类在顶部嵌入了 QLineEdit,用于在输入时过滤结果。我需要我的表与普通的QTableView 具有相同的 API,所以我想对它进行子类化,而不是对QWidget 进行子类化并向其添加QLineEdit 和QTableView。
我想我可以重新实现paintEvent(QPaintEvent*),将QPaintEvent 的rect() 改得低一点(QLineEdit 的高度,所以它在它下面绘制)然后通过它到QTableView::paintEvent(),但QPaintEvent 参数只指示需要重新绘制的区域,而不是应该绘制小部件的区域。
【问题讨论】:
-
你为什么反对制作组合小部件并走“硬”路?
-
因为代码开始看起来像这样: public: void setModel(QAbstractItemModel m){ table->setModel(m); } QWidget HorizontalHeader(){ return table->horizontalHeader(); } QWidget* verticalHeader(){ return table->verticalHeader(); [snip] QTableView 发出的所有信号都以相同的方式结束:我必须将它们全部映射到我的小部件的外部接口。
-
或者您可以从您的小部件中为 QTableView* 创建一个吸气剂。 :)
标签: qt subclass qtableview qlineedit paintevent