Здравствуйте.
Делаю popup виджет который, вызывается нажатием на кнопку и появляется под этой же кнопкой. Не могу понять как разместить его именно под кнопкой. При нажатии на кнопку, он появляется где то в левом верхнем углу, плюс-минус 10 см, но стоит мне развернуть окно во всю ширину экрана, как popup начинает правильно отображаться под кнопкой. Как правильно разместить popup?
Класс Popup виджета
class LookupView : public QWidget
{
Q_OBJECT
public:
explicit LookupView(QWidget *parent = 0) : QWidget(parent)
{
searchEdit_ = new QLineEdit(this);
searchEdit_->setPlaceholderText("Поиск");
QFrame* separator = new QFrame(this);
separator->setFrameShape(QFrame::HLine);
separator->setFrameShadow(QFrame::Sunken);
listView_ = new QListView(this);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(searchEdit_);
mainLayout->addWidget(separator);
mainLayout->addWidget(listView_);
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(0);
setWindowFlags(Qt::Popup);
setLayout(mainLayout);
}
private:
QLineEdit *searchEdit_;
QListView *listView_;
};
Класс кнопки в который включается класс Popup виджет
class LookupBox : public QPushButton
{
Q_OBJECT
public:
explicit LookupBox(QWidget *parent = 0) : QPushButton(parent)
{
lookupView_ = new LookupView;
lookupView_->setParent(this, Qt::Popup);
lookupView_->setVisible(false);
connect(this, &LookupBox::clicked, this, &LookupBox::onClick);
setContentsMargins(0, 0, 0, 0);
}
private slots:
//По нажатию на кнопку отработает этот слот
void onClick()
{
if(!lookupView_->isVisible()) {
lookupView_->setGeometry(this->rect());
lookupView_->move(this->x(), this->y() + this->height() * 2);
lookupView_->setVisible(true);
} else {
lookupView_->setVisible(false);
}
}
private:
LookupView *lookupView_;
};
main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LookupBox *locationEditDialog = new LookupBox;
locationEditDialog->setText("Бокс с представлением");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(locationEditDialog);
QWidget *widget = new QWidget;
widget->setLayout(layout);
widget->show();
return a.exec();
}