У меня есть класс MyListWidget, полученный из QWidget. Я передал parent и flags в конструктор базового класса QWidget (в тестах пробовал и Qt :: Dialog, и Qt :: Popup), но пользовательский виджет отображается в центре экрана, а не по центру его родителя.
MyListWidget* myListWidget = new MyListWidget(this, Qt::Dialog);
Это конструктор:
MyListWidget::MyListWidget(QWidget* parent, Qt::WindowFlags flags)
: QWidget(parent, flags),
ui(std::auto_ptr<Ui::MyListWidget>(new Ui::MyListWidget))
{
ui->setupUi(this);
}
Если я помещу этот виджет в отдельный диалог, все будет работать так, как ожидается. Но почему?
Упаковочные работы:
QDialog* popup = new QDialog(this, Qt::Popup);
QVBoxLayout* hLayout = new QVBoxLayout(popup);
// ... doing list creation like above
hLayout->addWidget(mmyListWidget);
popup->setLayout(hLayout);
const int width = mapListWidget->width();
const int height = mapListWidget->height();
popup->resize(width, height);
Есть идеи, что может произойти здесь?
QWidget
по умолчанию не отображается в центре, поэтому вам нужно отцентрировать его вручную (вы можете сделать это в конструкторе):
MyListWidget::MyListWidget(QWidget* parent, Qt::WindowFlags flags)
: QWidget(parent, flags),
ui(std::auto_ptr<Ui::MyListWidget>(new Ui::MyListWidget))
{
ui->setupUi(this);
move(
parent->window()->frameGeometry().topLeft() +
parent->window()->rect().center() - rect().center()
);
}
Постскриптум Остерегаться std::auto_ptr
, вы, вероятно, хотите использовать std::unique_ptr
Эти дни.
Я не совсем уверен, чего вы пытаетесь достичь, но у меня есть ощущение, что вы должны извлечь MyListWidget из QDialog.
С Уважением,
Бен