QT版本 5.10.1
问题1:
在菜单,ComboBox下拉框中,使用自定义窗口时,QLineEdit会出现无法输入中文的情况。
原因:
Qt::Popup的使用会导致QTextEdit,TextArea等文本编辑器的焦点丢失。
解决方法:
1、自定义widget,实现Popup效果
2、重写QLineEdit,在showEvent中,调用activvateWindow接口,手动进行激活
问题2:
QListWidgetItem 设置上自定义的Widget后,变化QListWidget大小会出现隐藏掉itemWidget的问题。
原因:
itemWidget本身窗口正常,无任何问题,问题原因仅因为QT内部,计算对应ItemWidget绘制区域失败导致
解决方法:
创建Delegate,重写paint方法,通过QStyleOptionViewItem中的widget属性,以及QModelIndex索引,获取到对应位置的窗口,调用setGeometry接口
代码如下:
void
ListWidgetItemDelegate::paint
(
QPainter* pPainter,
const QStyleOptionViewItem& rOption,
const QModelIndex& nIndex
)const
{
QStyledItemDelegate::paint(pPainter, rOption, nIndex);
QListWidget* pListWidget = qobject_cast<QListWidget*>(const_cast<QWidget*>(rOption.widget));
QWidget* pWidget = pListWidget->itemWidget(pListWidget->item(nIndex.row()));
if(pWidget )
{
pWidget->setGeometry(rOption.rect);
}
}