QListWidget设置PopUp不生效

项目中经常碰到点击一个输入框,弹出下拉列表,选择下拉列表中的选项后,下拉列表消失。很显然这里要用到PopUp属性。本来此次是对QListWidget对象设置了PopUp属性,但是发现不生效。原因是我们的QListWidget可能不具备Qt::Window属性。因此我们可以想到可以对QListWidget对象包一层具有Window属性的控件。下面来看看我的实现

例如我们对一个QLineEdit增加一个下拉按钮

QToolButton* pBtn = new QToolButton;
connect(pBtn, &QToolButton::clicked, this, &MainWindow::slotShowList);
pBtn->setCursor(Qt::ArrowCursor);//如果不设置鼠标样式,鼠标移动到按钮上依旧显示为编辑框的鼠标样式。
QWidgetAction* action = new QWidgetAction(ui->lineEdit);
action->setDefaultWidget(pBtn);
ui->lineEdit->addAction(action, QLineEdit::TrailingPosition);

要想下拉按钮点击展开列表,并且能够点击其他地方能够消失。要想解决这个问题,可以对要显示的QListWidget对象外层加一个QWidget,然后对QWidget使用PopUp属性,发现这样设置后生效

QWidget* pWidget = new QWidget(this);
pWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);
QListWidget* pListWidget = new QListWidget(pWidget);
pWidget->setFixedSize(100, 200);
pListWidget->setFixedSize(100, 200);
pListWidget->addItem("beijing");
pListWidget->addItem("shanghai");
pListWidget->addItem("shenzhen");

还有要注意的是,一旦设置窗口的属性是Popup之后,该窗口的位置需要用全局坐标控制

QPoint pos = this->mapToGlobal(ui->lineEdit->geometry().bottomRight());
pWidget->move(pos.x() - pWidget->width(), pos.y());
pWidget->show();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值