Qt - Как получить боковую панель в MainWindow - PullRequest
0 голосов
/ 11 июня 2010

Я новичок в 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 голосов
/ 11 июня 2010

В вашем paintEvent вы заставляете изображение рисовать до 500x600 пикселей, но не назначаете фиксированный размер виджету. Так что, если виджет меньше, чем вы, вы не можете увидеть полное изображение. Если вы делаете setFixedSize (500, 600), это должно решить вашу проблему.

Вы также делаете

setSizePolicy (QSizePolicy (QSizePolicy :: Fixed, QSizePolicy :: Fixed));

в главном окне. Вы даете фиксированный размер помимо установки политики размера? Если политика размера фиксирована, вы должны указать размер окна.

Также я думаю, что вы можете вызвать setSizePolicy (QSizePolicy :: Fixed); непосредственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...