我们经常会遇到这样的需求,鼠标点击某个按钮之后,会弹出来一个选择框。如果鼠标点击其他地方,这个选择框就会消失的需求,例如微信表情框:
Qt 实现方式不止一种,我们这里说一种最简单的方式。
1. 点击Mainwindows里的按钮,我们在鼠标点击的位置显示一个对话框(QWidget):
void MainWindow::on_pushButton_2_clicked()
{
if (form == nullptr) {
form = new Form(this);
}
QPoint pt = QCursor::pos();
form->move(pt);
form->show();
}
2. 在Form 类里面只需要做属性设置 Qt::Popup
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
setWindowFlags(Qt::Popup | Qt::FramelessWindowHint);
}
效果如下:
两个重点:
1. Mainwindow 里面,构造Form 时,parent 一定要指定this,
2. From 构造函数设置属性 Qt::Popup