2010-06-11 70 views
0

我對qt很感興趣。我試圖創建一個窗口小部件。該小部件包含一張圖片(一個國際象棋棋盤)。現在,如果我試圖顯示窗口,它會顯示該圖片的一部分。這裏的代碼Qt - 如何獲得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

對不起,但我不明白。你究竟想要完成什麼? – humbagumba 2010-06-11 11:05:37

+0

對不起,這是拼寫錯誤。實際上它是滑動條 – prabhakaran 2010-06-12 02:27:31

+0

在上面的代碼中,我試圖通過窗口小部件在窗口中顯示圖片。但由於窗口大小比圖片小,我需要在窗口中的滾動條才能看到整個圖片。但是我沒有在窗口中找到任何滾動條。所以,我想問哪個函數將設置滾動條 – prabhakaran 2010-06-12 03:03:24

回答

0

在你paintEvent你迫使圖像被繪製爲500x600像素,但你沒有給修正大小的小部件。所以如果小部件比你小,你看不到完整的圖像。如果你做一個setFixedSize(500,600)它應該解決你的問題。

您也正在做

setSizePolicy(QSizePolicy(QSizePolicy ::固定,QSizePolicy ::固定));

在主窗口中。除了設置尺寸策略之外,您是否給予修復大小?如果尺寸策略是固定的,您應該指定窗口的尺寸。

另外我想你可以調用setSizePolicy(QSizePolicy :: Fixed);直。

+0

雅,它的工作是通過使用setFixedSize更改窗口的大小。是否可以製作可根據小部件調整大小的窗口。 你可以說如何製作一個小部件,它可以根據它得到的圖像調整大小。 – prabhakaran 2010-06-12 01:32:26

+0

但是我仍然想要一個滾動條 – prabhakaran 2010-06-12 04:27:42

+0

您好,要調整窗口小部件到圖片中,您只需獲取圖片大小並設置小部件大小。例如:widget.setFixedSize(image.size())。你可以在setBackgroundImage(const QPixmap&)方法中做到這一點,通過這種方式,每當你改變它時它都會調整。 – cnebrera 2010-06-12 20:31:54