改一下:
void MainWindow::button(QDialog *)
{
Button = new QPushButton("change picture",this);
Button->setGeometry(QRect(QPoint(300, 300),QSize(200, 50))); 这行和下面的layout只能用一个,这行代表手动管理button大小 ,删除这行。
QVBoxLayout *layout = new QVBoxLayout; 这行有layout管理button大小
layout->addWidget(Button);
QWidget *w = new QWidget(this);
w->setLayout(layout);
setCentralWidget(w);
setLayout(layout);问题在这里,QMainWindow需要一个widget作为中央窗口部件,这个widget可以任意复杂,包含任意的控件。button需要放在widget里。QMainWindow不支持setLayout,所以看不见。这行删除。
}