关于QComboBox设置(QListWidget)代理后,下拉框item项拖动出现界面异常解决方法

由于QComboBox下拉框每个item项需要引入一些控件,比如头像,删除按钮等,因此需要引用QListWidget,去添加带头像按钮等控件的窗口来实现,如以下部分代码:

	m_Accountlist = new QListWidget();
	ui.comboBox->setModel(m_Accountlist->model());
	ui.comboBox->setView(m_Accountlist);
	ui.comboBox->setMaxVisibleItems(4);

	for (int i = 0; i < m_userNameList.size(); i++)
	{
		AccountItem *account_item = new AccountItem();
		account_item->setAccountInfo(i, m_userNameList[i]);
		connect(account_item, &AccountItem::signalShowAccountInfo, this, &VLoginWidget::sltShowAccountInfo);
		connect(account_item, &AccountItem::signalRemoveAccount, this, &VLoginWidget::sltRemoveAccount);
		QListWidgetItem *list_item = new QListWidgetItem(m_Accountlist);
		m_Accountlist->setItemWidget(list_item, account_item);
	}

但是这种做法在一些电脑环境下会出现item项拖动导致界面异常问题
在这里插入图片描述
最开始想到的是设置QListWidget不可拖放属性,包括设置item项不可拖放属性,都还是存在这个问题。
最后经过QComboBox的showPopup信号进行item调试,发现item项数目一直是正确的,异常的只是界面显示,尤其是滑动条拖动底部的时候,再次打开下拉框就会出现界面异常问题
解决方案就是重新将滑动条移到顶部,这样不会导致item向下拉时,滑动条超过了临界值,导致最上面的item项无法显示。

	connect(ui.comboBox, &ComboBox::sigHidePopup, this, [=]() {
		ui.comboBox->view()->verticalScrollBar()->setSliderPosition(0);
	});

猜你喜欢

转载自blog.csdn.net/qq_36651243/article/details/104006510