2013-07-11 18 views
11

Tôi đang cố gắng đặt bố cục của mình (sử dụng setLayout()) trong mainwindow. Nó không hiển thị bất cứ điều gì trên mắt:Qt: Không thể đặt bố cục trong QMainWindow

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0) 
    { 
     QVBoxLayout *vBoxLayout = new QVBoxLayout; 
     { 
      QPushButton *pushButton = new QPushButton(tr("A button")); 
      vBoxLayout->addWidget(pushButton); 
     } 
     setLayout(vBoxLayout); 
    } 
}; 
+0

Mã này không biên dịch. Bạn không thể cấp phát một đối tượng kiểu trừu tượng 'QLayout'. Xem dòng gần cuối nói rằng 'new QLayout'. –

Trả lời

17

Bạn cần thay đổi hai dòng cuối cùng của mã là như sau:

QWidget *widget = new QWidget(); 
widget->setLayout(VBoxLayout); 
setCentralWidget(widget); 
//VBoxLayout->addWidget(new QLayout); 
//setLayout(VBoxLayout); 

Các QMainWindow là một trường hợp đặc biệt. Bạn đặt nội dung của tiện ích này bằng cách đặt bố cục trong một QWidget mới và sau đó đặt nó làm tiện ích con trung tâm.
Xem this cũng trả lời.

+0

ok cảm ơn! tại sao có một khoảng trống setLayout khi nó không làm gì? –

+0

Không có 'setLayout (void *)'. Xem http://qt-project.org/doc/qt-4.8/qwidget.html#setLayout. Và 'setLayout()' không "không làm gì cả", nó đặt bố trí trên widget. Tuy nhiên, nếu bạn nhìn vào đầu ra của ứng dụng khi chạy hàm đó, bạn sẽ thấy một lỗi nói rằng bố cục đã được thiết lập. Xem tài liệu trước đó về 'setLayout()' để giải thích về lỗi này. –