我在 MFC 对话框中使用QWinWidget,并且 QWinWidget 没有正确绘制自身,也没有正确处理键盘输入。
重新粉刷 [未解决]
在 QWinWidget 中,我有一个 QTableWidget。当我滚动 QTableWidget 时,它不会重绘自身,直到我停止滚动,此时它会重绘所有内容。同样,我可以在 QTableWidget 中的单元格中键入内容,并且控件不会更新,直到我通过向上或向下滚动来强制它重新更新(它在滚动停止时重新更新)。
由于此 QWinWidget 位于 MFC CDialog 中,因此我尝试覆盖 CDialog 的 OnPaint 方法并仅调用 QWinWidget::repaint 方法,但是这有相反的问题,现在只有 QWinWidget 被更新并且 CDialog 从未重绘,从而导致伪影. 如果我调用 QWinWidget::repaint 和 CDialog::OnPaint,结果与不覆盖 OnPaint 方法相同。有没有人见过这个问题或知道如何解决它?
键盘输入 [已解决]
QWinWidget 中的所有控件都不能正确响应 tab 键或箭头键。制表符/箭头键只是跳过整个 QWinWidget(和所有子控件)。即使我在 QWinWidget 内部单击并选择了一个控件,下次我按 Tab 键时,它也会将焦点完全跳过整个 QWinWidget。
我注意到 QWinWidget 有两个函数,QWinWidget::focusNextPrevChild 和 QWinWidget::focusInEvent 并且它们都有一个注释标题说“\reimp”。我是否应该覆盖这些功能以获得正确的选项卡功能?如果是这样,如何实现这些功能以获得正确的选项卡功能。