我是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();
}
答案 0 :(得分:0)
在paintEvent中,您强制将图像绘制为500x600像素,但您没有为窗口小部件提供修复大小。因此,如果窗口小部件小于您,则无法看到完整图像。如果你做一个setFixedSize(500,600),它应该解决你的问题。
你也在做
setSizePolicy(QSizePolicy(QSizePolicy ::固定,QSizePolicy ::固定));
在主窗口中。除了设置尺寸政策之外,您是否给出了修正尺寸?如果修改了大小策略,则应指定窗口的大小。
另外我认为你可以调用setSizePolicy(QSizePolicy :: Fixed);直接