2013-08-01 5 views
8

Я новичок в программировании на qt, поэтому, пожалуйста, не возражайте, если вы найдете это вопрос noob. Я добавил кнопку в главное окно, но когда я запустил код, кнопка не отображается. Вот мой код:Как добавить кнопки в главное окно в 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; 
} 

Что я должен делать?

+0

Для начала лучше (с моей точки зрения) создать приложение с QWidget в качестве базового класса. QMainWindow предоставляет много дополнительных функций, и вы можете узнать об этом только тогда, когда у вас будет некоторый опыт работы с Qt. –

ответ

17

В главном окне вы должны использовать центральный виджет. У вас есть два варианта:

Установите кнопку для центрального виджета (Не так хороший выбор):

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

Добавить виджет и добавить кнопку для этого виджета и установить виджет для centralWidget:

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

И, конечно, вы можете использовать макеты для вашего centralWidget:

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

Что делать, если я хочу добавить больше кнопок? Должен ли я использовать один и тот же виджет или создавать новый виджет для каждой кнопки? – Learner

+0

@ пользователь2595561 ~> Нет! У вас только один центральный виджет! Вы должны использовать макеты. Я скоро поправлю свой ответ. – saeed

+0

Большое спасибо. Он работает как магия :) – Learner