2010-06-11 7 views
0

Je suis nouveau chez qt. J'ai essayé de créer une fenêtre avec un widget. Le widget contient une image (un échiquier). Maintenant, si j'ai essayé d'afficher la fenêtre, elle montre une partie de cette image. Voici le codeQt - Comment obtenir la barre latérale dans MainWindow

#include<QApplication> 
#include<QMainWindow> 
#include<QWidget> 
#include<QMenu> 
#include<QMenuBar> 
#include<QPainter> 
#include<QFrame> 
#include<QHBoxLayout> 
#include<iostream> 

using namespace std; 

class MyWindow:public QMainWindow 
{ 
public: 
MyWindow(); 
}; 

class MyWidget:public QWidget 
{ 
public: 
MyWidget(); 
void paintEvent(QPaintEvent * event); 
}; 

int main(int argc,char *argv[]) 
{ 
Q_INIT_RESOURCE(puzzle); 

QApplication app(argc,argv); 

MyWindow mainWindow; 

mainWindow.show(); 

return app.exec(); 
} 

MyWindow::MyWindow():QMainWindow() 
{ 
setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed)); 

QMenu * fileMenu=menuBar()->addMenu(QObject::tr("Options")); 

QAction * restartAction = fileMenu->addAction(tr("NewGame")); 

QAction * exitAction = fileMenu->addAction(tr("Exit")); 
exitAction->setShortcuts(QKeySequence::Quit); 

QWidget * tempWidget=new MyWidget(); 

QFrame * newFrame=new QFrame(); 
QHBoxLayout * horizontal= new QHBoxLayout(newFrame); 

horizontal->addWidget(tempWidget); 
setCentralWidget(newFrame); 
} 

MyWidget::MyWidget():QWidget() 
{ 
setMinimumSize(100,100); 
setMaximumSize(1000,1000); 
} 

void MyWidget::paintEvent(QPaintEvent * event) 
{ 
QPainter painter; 
painter.begin(this); 
painter.drawPixmap(QRect(0,0,500,600),QPixmap("Board").scaled(QSize(500,600),Qt::KeepAspectRatioByExpanding,Qt::SmoothTransformation)); 
painter.end(); 
} 
+0

Je suis désolé mais je ne comprends pas. Qu'essayez-vous exactement d'accomplir? – humbagumba

+0

Désolé, c'est une faute d'orthographe. En fait c'est la barre coulissante – prabhakaran

+0

Dans le code ci-dessus j'essaie de montrer une image dans une fenêtre à travers un widget. Mais en raison de cette taille de Windows est plus petite que l'image, j'ai besoin d'une barre de défilement dans la fenêtre pour voir l'image entière. Mais je n'ai pas 6 de barre de défilement dans la fenêtre. Donc, je demande quelle fonction définira la barre de défilement – prabhakaran

Répondre

0

En vous paintEvent vous obligez l'image à peindre à 500x600 pixels, mais vous ne donnez pas une taille fixe au widget. Donc, si le widget est plus petit que cela, vous ne pouvez pas voir l'image complète. Si vous faites un setFixedSize (500, 600) il devrait résoudre votre problème.

Vous faites également

setSizePolicy (QSizePolicy (QSizePolicy :: fixe, QSizePolicy :: fixe));

dans la fenêtre principale. Est-ce que vous donnez une taille fixe en dehors de la définition de la politique de taille? Si la règle de taille est fixe, vous devez spécifier une taille pour la fenêtre.

Aussi je pense que vous pouvez appeler setSizePolicy (QSizePolicy :: Fixed); directement.

+0

Ya, cela fonctionne en changeant la taille de la fenêtre en utilisant setFixedSize. Est-il possible de faire la fenêtre qui peut ajuster sa taille en fonction du widget. Et pouvez-vous dire comment faire un widget qui peut ajuster sa taille en fonction de l'image qu'il a. – prabhakaran

+0

Mais encore je veux obtenir une barre de défilement – prabhakaran

+0

Bonjour, pour ajuster le widget à l'image dont vous avez juste besoin pour obtenir la taille de l'image et définir la taille du widget. Quelque chose comme: widget.setFixedSize (image.size()). Vous pouvez le faire dans une méthode setBackgroundImage (const QPixmap &), de cette façon, il sera ajusté à chaque fois que vous le modifiez – cnebrera

Questions connexes