2013-08-01 15 views
8

Jestem nowy w programowaniu qt, więc proszę nie zwracać uwagi, jeśli uznasz to za pytanie typu noob. Dodałem przycisk do mojego głównego okna, ale po uruchomieniu kodu przycisk nie jest wyświetlany. Oto mój kod:Jak dodać przyciski do głównego okna w 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; 
} 

Co należy zrobić?

+0

Na początek lepiej (z mojego punktu widzenia) utworzyć aplikację z QWidget jako klasą podstawową. QMainWindow zapewnia dużo dodatkowej funkcjonalności i możesz nauczyć się go tylko wtedy, gdy będziesz miał trochę doświadczenia z Qt. –

Odpowiedz

17

W głównym oknie powinieneś użyć głównego widgetu. Masz dwie możliwości:

Ustaw przycisk centralnego widget (nie tak dobry wybór):

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

dodać widget i dodać przycisk do tego widget i ustawić widżet dla centralWidget:

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

I z pewnością można wykorzystać układy twój 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

Co się stanie, jeśli chcę dodać więcej przycisków? Czy powinienem użyć tego samego widgetu lub utworzyć nowy widżet dla każdego przycisku? – Learner

+0

@ user2595561 ~> Nie! Masz tylko jeden centralny widget! Powinieneś używać układów. Szybko zaktualizuję swoją odpowiedź. – saeed

+0

Wielkie dzięki. Działa jak magia :) – Learner

Powiązane problemy