对滚动区域QScrollArea用法的摸索(2)

上一篇:对滚动区域QScrollArea用法的摸索

        上个月写了一篇对滚动区域QScrollArea用法的摸索,当时时间仓促,自己测试成功了,就把我的方法写上去了。收到网友pjangel007 的留言,说放在QScrollArea里的控件iconEditorsizePolicy属性设为Expanding也可以。抱着严谨的态度我又新建了个工程实验了一下。

        我用的是Qt 4.7.2 for windows。实验的结果是:当MainWindowcentralWidget中只有一个iconEditor时,sizePolicy设置成什么都可以正常实现其显示内容的放大和缩小;当MainWindow中有还有别的控件,比如tableWidget时,iconEditorsizePolicy属性就只在设置成MinimumFixedMinimumExpanding这三个时才有效。

        我的实验过程是这样的:

1.Qt Creator新建一个新的包含Ui的工程。在Ui中我添加了如下几个控件:

iconEditor是通过promotepromote的方法见我的博文)的方法加入的。tableWidget控件的sizePolicy属性默认为Expanding,改成其他的也行。

2.MainWindow类中添加:

private

    void init();

    QScrollArea *scrollArea;

    QHBoxLayout *mainLayout;

    QPushButton *zoomIn;

    QPushButton *zoomOut;

private slots:

    void editorZoomIn();

    void editorZoomOut();

3.MainWindow.cpp中添加初始化、放大图片、缩小图片函数。设置QScrollArea,重新手工布局:

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

 

    init();

 

    scrollArea = new QScrollArea(ui->centralWidget);

    scrollArea->setWidget(ui->iconEditor);

    scrollArea->setWidgetResizable(true);

 

    mainLayout = new QHBoxLayout;

    mainLayout->addWidget(scrollArea);

    mainLayout->addWidget(ui->tableWidget);

 

    ui->centralWidget->setLayout(mainLayout);

}

 

MainWindow::~MainWindow()

{

    delete ui;

}

 

void MainWindow::init(){

    zoomIn = new QPushButton("Zoom In",this);

    connect(zoomIn,SIGNAL(clicked()),this,SLOT(editorZoomIn()));

 

    zoomOut = new QPushButton("Zoom Out",this);

    connect(zoomOut,SIGNAL(clicked()),this,SLOT(editorZoomOut()));

 

    ui->mainToolBar->addWidget(zoomIn);

    ui->mainToolBar->addWidget(zoomOut);

 

    ui->iconEditor->setIconImage(QImage(":/images/mouse.png"));

}

 

void MainWindow::editorZoomIn(){

    int zoom=ui->iconEditor->zoomFactor();

    if(zoom>0){

        zoom++;

        ui->iconEditor->setZoomFactor(zoom);

    }

    else{

        zoom=8;

        ui->iconEditor->setZoomFactor(zoom);

    }

}

 

void MainWindow::editorZoomOut(){

    int zoom=ui->iconEditor->zoomFactor();

    if(zoom>1){

        zoom--;

        ui->iconEditor->setZoomFactor(zoom);

    }

}

4.将资源“:/images/mouse.png”添加进工程的资源文件。

5.依次改变iconEditorsizePolicy属性,并编译运行。点击“Zoom In”放大图片,看当图片超过QScrollArea的可视范围后,滚动条是否出现。

实验结果:

iconEditorsizePolicy属性设为FixedMinimumMinimumExpanding时,滚动条有效。截图如下:

iconEditorsizePolicy属性设为MaximumPreferredExpandingIgnored时,滚动条不出现。截图如下:

 

        最后附上这个测试程序:http://ishare.iask.sina.com.cn/f/24435956.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值