上图就是我的程序的主界面,继承自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));
}
不知道你获取
Display
的Rect
的位置和方式。可以贴出代码来看一下。