2013-08-01 39 views
8

Tôi mới đến QT lập trình vì vậy xin đừng phiền nếu bạn tìm thấy nó một câu hỏi noob. Tôi đã thêm một nút vào cửa sổ chính của mình nhưng khi tôi chạy mã, nút này không được hiển thị. Dưới đây là mã của tôi:Làm thế nào để thêm các nút vào một cửa sổ chính trong Qt?

mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QtWidgets> 

MainWindow::MainWindow(QWidget *parent) 
{ 
QPushButton *train_button = new QPushButton(this); 
train_button->setText(tr("something")); 
train_button->move(600, 600); 
train_button->show(); 
} 

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
Q_OBJECT 

public: 
explicit MainWindow(QWidget *parent = 0); 
~MainWindow(); 

private: 
Ui::MainWindow *ui; 
}; 

#endif // MAINWINDOW_H 


MainWindow::~MainWindow() 
{ 
delete ui; 
} 

Tôi nên làm gì?

+0

Đối với beggining nó là tốt hơn (từ quan điểm của tôi) để tạo ra ứng dụng với QWidget như lớp cơ sở. QMainWindow cung cấp rất nhiều chức năng bổ sung và bạn có thể tìm hiểu nó chỉ khi bạn sẽ có một số kinh nghiệm nó Qt. –

Trả lời

17

Trong cửa sổ chính, bạn nên sử dụng phụ tùng trung ương. Bạn có hai lựa chọn:

Đặt nút cho widget trung ương (lựa chọn Không phải như vậy tốt):

QPushButton *train_button = new QPushButton(this); 
train_button->setText(tr("something")); 
setCentralWidget(train_button); 

Thêm một widget và thêm vào nút để widget và thiết lập các widget cho centralWidget:

QWidget * wdg = new QWidget(this); 
QPushButton *train_button = new QPushButton(wdg); 
train_button->setText(tr("something")); 
setCentralWidget(wdg); 

Và chắc chắn bạn có thể sử dụng Layouts cho centralWidget của bạn:

QWidget * wdg = new QWidget(this); 
QVBoxLayout *vlay = new QVBoxLayout(wdg); 
QPushButton *btn1 = new QPushButton("btn1"); 
vlay->addWidget(btn1); 
QPushButton *btn2 = new QPushButton("btn2"); 
vlay->addWidget(btn2); 
QPushButton *btn3 = new QPushButton("btn3"); 
vlay->addWidget(btn3); 
wdg->setLayout(vlay); 
setCentralWidget(wdg); 
+0

Nếu tôi muốn thêm nhiều nút hơn thì sao? Tôi có nên sử dụng cùng một tiện ích hoặc tạo tiện ích con mới cho mỗi nút không? – Learner

+0

@ user2595561 ~> Không! Bạn chỉ có một widget trung tâm! Bạn nên sử dụng Bố cục. Tôi sẽ sớm cập nhật câu trả lời của mình. – saeed

+0

Cảm ơn rất nhiều. Nó hoạt động như kỳ diệu :) – Learner

Các vấn đề liên quan