QT的问题,无法正确获取窗口大小

上图就是我的程序的主界面,继承自QMainWindow,左侧一个自定义类Display继承自QWidget,右侧Config继承自QWidget。

Display和Config加入到分割器QSplitter,并把该分割器设置为主窗体的CentralWidget,并在主界面构造函数里设置其size为(1200,650),运行显示正常。

接着我想setSceneRect为Dispaly的大小,也就是正好是上图左边的长方形大小,但是怎么也获取不到正确的大小,我在Display构造函数里直接打印了size(),为(640,480)。

运行结果也证明了,size不对,小了。

右上角白色的矩形就是scene,我需要把scene设置为正好铺满左侧Dispaly,不多也不小。

-----------------------------------------更新-----------------------------

Centralization::Centralization(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("Algorithm Visualization"));
    setWindowState(Qt::WindowMaximized);

    //“打开”动作
    openFileAction=new QAction(tr("打开"),this);
    openFileAction->setShortcut(tr("Ctrl+O"));

    //“退出”动作
    exitAction=new QAction(tr("退出"),this);
    exitAction->setShortcut(tr("Ctrl+Q"));
    connect(exitAction,SIGNAL(triggered()),this,SLOT(close()));

    //“更新”动作
    updateAction=new QAction(tr("更新"),this);

    //“反馈”动作
    feedbackAction=new QAction(tr("报告Bug或建议"),this);

    //“关于”动作
    aboutAction=new QAction(tr("关于"),this);

    //“文件”菜单
    fileMenu=menuBar()->addMenu(tr("文件"));
    fileMenu->addAction(openFileAction);
    fileMenu->addSeparator();
    fileMenu->addAction(exitAction);

    //“帮助”菜单
    helpMenu=menuBar()->addMenu(tr("帮助"));
    helpMenu->addAction(updateAction);
    helpMenu->addAction(feedbackAction);
    helpMenu->addAction(aboutAction);

    //分割器
    splitter=new QSplitter(Qt::Horizontal);
    display=new Display(splitter);
    //display->resize(1600,1000);
    config=new Config(splitter);
    splitter->setStretchFactor(0,1);
    splitter->setStretchFactor(1,0);
    this->setCentralWidget(splitter);
}

-----------------------------------------------代码------------------------------------
设置setSceneRect代码

#include "dfs_display.h"

DFSDisplay::DFSDisplay(QWidget *parent) : QWidget(parent)
{
    width=1560;
    height=780;
    itemWidth=30;
    row=height/itemWidth;
    column=width/itemWidth;
    itemsNum=row*column;
    scene=new QGraphicsScene;
    scene->setSceneRect(-width/2,-height/2,width,height);
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<column;j++)
        {
            item=new QGraphicsRectItem(0+j*itemWidth,0+i*itemWidth,itemWidth,itemWidth);
            scene->addItem(item);
            list<<item;
        }
    }
    view=new QGraphicsView(this);
    view->setScene(scene);
    QPen pen;
    pen.setColor(QColor(Qt::green));
    startItem=list[480];
    startItem->setPen(pen);
    startItem->setBrush(QColor(Qt::green));
    endItem=list[490];
    pen.setColor(QColor(Qt::red));
    endItem->setPen(pen);
    endItem->setBrush(QColor(Qt::red));
}
阅读 8k
2 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题