2017-03-12 1 views
1

Je suis nouveau à Qt et j'ai ce code qui est censé afficher une barre de curseur et un numéro dans la fenêtre principale de Qt. Mais tout ce que je reçois est la fenêtre principale elle-même et rien dedans. Je l'ai utilisé la fonction show(), mais rien ne se passeMon programme Qt montrant une fenêtre vide avec le titre

#include "mainwindow.h" 
#include <QApplication> 
#include <QSpinBox> 
#include <QSlider> 
#include <QHBoxLayout> 
#include <QtGui/QApplicationStateChangeEvent> 



int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QMainWindow program ; 

    program.setWindowTitle("Title of window"); 


    QSpinBox *spinboxx = new QSpinBox(); 
    QSlider *slider = new QSlider(Qt::Horizontal); 
    spinboxx->setRange(1,40); 
    slider->setRange(1,40); 

QObject::connect(spinboxx, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); 
QObject::connect(slider, SIGNAL(valueChanged(int)), spinboxx, SLOT(setValue(int))); 
QHBoxLayout *layout = new QHBoxLayout; 

layout->addWidget(slider); 
layout->addWidget(spinboxx); 
program.setLayout(layout); 
    program.show(); 

    return app.exec(); 
} 
+1

Side note: ne pas utiliser '' comprend. Tout 'Qt' doit inclure un seul élément, soit' 'ou' '. Le format module/classe masque les erreurs de compilation du projet et pousse simplement les erreurs de compilation vers le temps de liaison, où le problème a toujours été dans le fichier '.pro' (ou dans un dossier de construction périmé). –

Répondre

2

Il y a un avertissement important lors de la compilation de votre code:

QWidget :: setLayout: Tentative de définition QLayout "" sur QMainWindow "", qui a déjà une disposition

En fait, vous ne pouvez pas définir une disposition pour QMainWindow, car elle a sa propre disposition. De l'Documentation of Qt5:

Une fenêtre principale fournit un cadre pour la construction de l'interface utilisateur d'une application. Qt a QMainWindow et ses classes liées pour la gestion de la fenêtre principale . QMainWindow a sa propre disposition à laquelle vous pouvez ajouter QToolBars, QDockWidgets, un QMenuBar et un QStatusBar. La mise en page a une zone centrale qui peut être occupée par n'importe quel type de widget.

Vous devez assigner un widget à l'QMainWindowprogramme plutôt comme ceci:

QWidget *window = new QWidget; 
QSpinBox *spinboxx = new QSpinBox(); 
QSlider *slider = new QSlider(Qt::Horizontal); 

QHBoxLayout *layout = new QHBoxLayout; 
layout->addWidget(slider); 
layout->addWidget(spinboxx); 

window->setLayout(layout); 


QMainWindow program ; 
program.setWindowTitle("Title of window"); 
program.setCentralWidget(window); 
program.show(); 

PS: J'ai gardé la convention de nom que vous avez choisi de faire les changements plus clairs. Je préfère utiliser un widget que fenêtre et fenêtre que programme

+0

Ça a tellement de sens! Merci beaucoup! –