• 7212阅读
  • 3回复

卡尺(gview,ghview)与视图(graphicsview)之间要无空隙 [复制链接]

上一主题 下一主题
离线hope_yh
 

只看楼主 倒序阅读 楼主  发表于: 2010-01-25
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
如图,卡尺(gview,ghview)与视图(graphicsview)之间要无空隙,用setContentMagin和SetSpacing都不起作用,具体代码如下
graphicsView = new QGraphicsView;
    graphicsView->setRenderHint(QPainter::Antialiasing, false);
    graphicsView->setDragMode(QGraphicsView::RubberBandDrag);
    graphicsView->setOptimizationFlags(QGraphicsView::DontSavePainterState);
    graphicsView->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
    graphicsView->setFixedWidth(500);
    graphicsView->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    graphicsView->setContentsMargins(0,0,0,0);

    gview = new QGraphicsView();
    gview->horizontalScrollBar()->hide();
    gview->verticalScrollBar()->hide();
    gview->setScene(mainwindow->scene[2]);
    gview->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    gview->setFixedWidth(100);
    gview->setContentsMargins(0,0,0,0);

    ghview = new QGraphicsView();
    ghview->horizontalScrollBar()->hide();
    ghview->verticalScrollBar()->hide();
    ghview->setScene(mainwindow->scene[3]);
    ghview->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    ghview->setFixedHeight(100);
    ghview->setContentsMargins(0,0,0,0);

    int size = style()->pixelMetric(QStyle::PM_ToolBarIconSize);
    QSize iconSize(size, size);

    QToolButton *zoomInIcon = new QToolButton;
    zoomInIcon->setAutoRepeat(true);
    zoomInIcon->setAutoRepeatInterval(33);
    zoomInIcon->setAutoRepeatDelay(0);
    zoomInIcon->setIcon(QPixmap(":/zoomin.png"));
    zoomInIcon->setIconSize(iconSize);
    QToolButton *zoomOutIcon = new QToolButton;
    zoomOutIcon->setAutoRepeat(true);
    zoomOutIcon->setAutoRepeatInterval(33);
    zoomOutIcon->setAutoRepeatDelay(0);
    zoomOutIcon->setIcon(QPixmap(":/zoomout.png"));
    zoomOutIcon->setIconSize(iconSize);
    zoomSlider = new QSlider;
    zoomSlider->setMinimum(0);
    zoomSlider->setMaximum(500);
    zoomSlider->setValue(250);
    zoomSlider->setTickPosition(QSlider::TicksRight);

    // Zoom slider layout
    QVBoxLayout *zoomSliderLayout = new QVBoxLayout;
    zoomSliderLayout->addWidget(zoomInIcon);
    zoomSliderLayout->addWidget(zoomSlider);
    zoomSliderLayout->addWidget(zoomOutIcon);
    zoomSliderLayout->setContentsMargins(0,0,0,0);
    QToolButton *rotateLeftIcon = new QToolButton;
    rotateLeftIcon->setIcon(QPixmap(":/rotateleft.png"));
    rotateLeftIcon->setIconSize(iconSize);
    QToolButton *rotateRightIcon = new QToolButton;
    rotateRightIcon->setIcon(QPixmap(":/rotateright.png"));
    rotateRightIcon->setIconSize(iconSize);
    rotateSlider = new QSlider;
    rotateSlider->setOrientation(Qt::Horizontal);
    rotateSlider->setMinimum(-360);
    rotateSlider->setMaximum(360);
    rotateSlider->setValue(0);
    rotateSlider->setTickPosition(QSlider::TicksBelow);

    // Rotate slider layout
    QHBoxLayout *rotateSliderLayout = new QHBoxLayout;
    rotateSliderLayout->addWidget(rotateLeftIcon);
    rotateSliderLayout->addWidget(rotateSlider);
    rotateSliderLayout->addWidget(rotateRightIcon);
    rotateSliderLayout->setContentsMargins(0,0,0,0);
    resetButton = new QToolButton;
    resetButton->setText(tr("0"));
    resetButton->setEnabled(false);

    // Label layout

    QHBoxLayout *labelLayout = new QHBoxLayout;
    label = new QLabel(name);
    antialiasButton = new QToolButton;
    antialiasButton->setText(tr("Antialiasing"));
    antialiasButton->setCheckable(true);
    antialiasButton->setChecked(false);
    openGlButton = new QToolButton;
    openGlButton->setText(tr("OpenGL"));
    openGlButton->setCheckable(true);
#ifndef QT_NO_OPENGL
    openGlButton->setEnabled(QGLFormat::hasOpenGL());
#else
    openGlButton->setEnabled(false);
#endif
    printButton = new QToolButton;
    printButton->setIcon(QIcon(QPixmap(":/fileprint.png")));



    //labelLayout->addWidget(tablewidget);
    labelLayout->addWidget(label);
    labelLayout->addStretch();
    labelLayout->addWidget(antialiasButton);
    labelLayout->addWidget(openGlButton);
    labelLayout->addWidget(printButton);
    labelLayout->setContentsMargins(0,0,0,0);
    QGridLayout *topLayout = new QGridLayout;
    topLayout->setSpacing(0);
    topLayout->setContentsMargins(0,0,0,0);
    topLayout->setHorizontalSpacing(0);
    topLayout->setVerticalSpacing(0);
    topLayout->addLayout(labelLayout, 0, 2);

    topLayout->addWidget(graphicsView, 1, 1);
    topLayout->addWidget(gview, 1, 0);
    topLayout->addWidget(ghview,0,1);
    topLayout->addLayout(zoomSliderLayout, 1, 2);
    topLayout->addLayout(rotateSliderLayout, 2, 1);
    topLayout->addWidget(resetButton, 2, 1);
    setLayout(topLayout);
    timer = new QTimer(this);
请帮助一下
离线yangfanxing
只看该作者 1楼 发表于: 2010-01-25
用setContentMagin和SetSpacing都不起作用——
这是因为设置了QGridLayout *topLayout 的缘故;

像你的滑块儿等就加得不错吧~~~

看看把标尺的宽度减下来。。。还有整个布局太宽了()把整个窗口的宽度减下来
PHPWind好恶心。。。不想看这种界面。。。
离线hope_yh

只看该作者 2楼 发表于: 2010-01-25
我在缩放graphicsView进入一页时,两把卡尺的Scrollbar就消失,这时graphicsView与gview,ghview就无间隙,
我想gview->horizontalScrollBar()->hide(); gview->verticalScrollBar()->hide();ghview->horizontalScrollBar()->hide();ghview->verticalScrollBar()->hide();尽管将scrollbar隐藏起来,但是还是占着位置,除非进入一页显示得下,不知用什么办法彻底将scrollbar去除
离线hope_yh

只看该作者 3楼 发表于: 2010-01-25
可以这样用,搞定
gview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
gview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
快速回复
限100 字节
 
上一个 下一个