Qt - 如何获取MainWindow中的侧边栏

时间:2010-06-11 11:03:13

标签: qt

我是qt的新手。我试图用小部件创建一个窗口。小部件包含图片(国际象棋棋盘)。现在,如果我试图显示窗口,它会显示该图片的一部分。这里是代码

#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();
}

1 个答案:

答案 0 :(得分:0)

在paintEvent中,您强制将图像绘制为500x600像素,但您没有为窗口小部件提供修复大小。因此,如果窗口小部件小于您,则无法看到完整图像。如果你做一个setFixedSize(500,600),它应该解决你的问题。

你也在做

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

在主窗口中

。除了设置尺寸政策之外,您是否给出了修正尺寸?如果修改了大小策略,则应指定窗口的大小。

另外我认为你可以调用setSizePolicy(QSizePolicy :: Fixed);直接