Qt 滚动区

QScrollArea类提供了一个可以滚动的可视窗口和两个滚动条。如果我们想给一个控件加上一个滚动条,从QScrollArea继承会比设计我们自己的QScrollBar类实现滚动函数更简单。
Figure 6.11. QScrollArea's constituent widgets

  
调用QScrollArea的setWidget()函数就能给控件加上滚动条。QScrollArea自动把控件设置为视图(viewport,QScrollArea::viewport()得到)的一个子控件。例如,如果我们想给第五章的IconEditor加上滚动条,我们可以这样写代码:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    IconEditor *iconEditor = new IconEditor;
    iconEditor->setIconImage(QImage(":/images/mouse.png"));
    QScrollArea scrollArea;
    scrollArea.setWidget(iconEditor);
    scrollArea.viewport()->setBackgroundRole(QPalette::Dark);
    scrollArea.viewport()->setAutoFillBackground(true);
    scrollArea.setWindowTitle(QObject::tr("Icon Editor"));
    scrollArea.show();
    return app.exec();
在QScrollArea控件上显示控件的当前尺寸或者使用控件的sizeHint。调用setWidgetResizable(true),QScrollArea自动改变控件的大小。
当视图小于控件大小时,滚动条会自动出现。也可以设置滚动条一直显示:
scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
Figure 6.12. Resizing a QScrollArea

 
QScrollArea继承了QAbstractScrollArea所有功能。QTextEdit和QAbstractItemView也是继承自QAbstractScrollArea,这些类不需要使用QScrollArea。


#ifndef FILEMANEGE_STATE_H
#define FILEMANEGE_STATE_H

#include <QScrollArea>
#include "button_base.h"
#include <QProcess>
class QFrame;
//class QScrollArea;
class QGridLayout;
class Document_manager_State : public QScrollArea
{
    Q_OBJECT
public:
    explicit Document_manager_State(QWidget *parent = 0);
    virtual ~Document_manager_State();

    void translatestring_state1();
    QProcess *prcocess;
signals:

public slots:
    void  basebutton_clicked();

private:
//    QScrollArea* scroll;
    QFrame *frame;
    QGridLayout *layout;
    void createbuttons(void);

};

#endif // FILEMANEGE_STATE_H

#include "filemanege_state.h"
#include "Qtglobal.h"
#include <QtGui>
Document_manager_State::Document_manager_State(QWidget *parent) :
    QScrollArea(parent)
{
//    prcocess = new QProcess(this);
   /* scroll = new QScrollArea(0);
    frame = new QFrame(scroll);
    scroll->setWidget(frame);
    scroll->setWidgetResizable(true)*/
    qDebug("filemanege :");
    frame = new QFrame(this);
    frame->setFrameStyle(QFrame::NoFrame);
    frame->setLineWidth(0);
    QVBoxLayout *vlayout = new QVBoxLayout(frame);
    layout = new QGridLayout();

    layout->setMargin(0);
    layout->setHorizontalSpacing(50);
    layout->setVerticalSpacing(10);

    createbuttons();
    vlayout->addLayout(layout);
    QSpacerItem *verticalSpacer = new QSpacerItem(20, 452, QSizePolicy::Minimum, QSizePolicy::Expanding);

    vlayout->addItem(verticalSpacer);
    frame->setLayout(vlayout);
    this->setWidget(frame);
    this->setWindowFlags(Qt::SplashScreen);
    this->setFrameStyle(QFrame::NoFrame);

//    frame->setLayout(layout);

//    scroll->show();
//    QVBoxLayout *mainlayout=new QVBoxLayout;
//    mainlayout->addWidget(scroll);
//    this->setLayout(mainlayout);

//    setWindowFlags(Qt::FramelessWindowHint);
    this->setFixedSize(SCREEN_MAINWIDGET_WIDTH,SCREEN_MAINWIDGET_HEIGHT);

  setGeometry(SCREEN_MAINWIDGET_GEOMETRY_X,SCREEN_MAINWIDGET_GEOMETRY_Y,SCREEN_MAINWIDGET_WIDTH,SCREEN_MAINWIDGET_HEIGHT);

}

Document_manager_State::~Document_manager_State()
{

}

void Document_manager_State::translatestring_state1()
{

}

void Document_manager_State::createbuttons(void)
{
    QDir programDir = QDir(PROGRAM_PATH_CHECK);
    QDir imageDir= QDir(PICTURE_PATH_DESK_CHECK);

    QStringList files;
    QIcon *icon;
    static QString transName;

    files = programDir.entryList(QStringList("*"),
                                 QDir::Files | QDir::NoSymLinks|QDir::Executable);

    int row,colum;
    for (int i=0; i<files.size(); i++)

    {
        row=i/4;
        colum=i%4;
        qDebug("files[i] is %s",qPrintable(files[i]));
        Button_Base *toolbutton=new Button_Base;
       toolbutton->setFixedSize(60,80);
        toolbutton->setText(files[i]);
        icon=new QIcon;
        if(imageDir.exists(files[i]+tr(".png")))
        {
            icon->addFile(tr(PICTURE_PATH_DESK_CHECK)+files[i]+".png");

        }
        else
        {
            icon->addFile(tr(PICTURE_PATH_DESK_CHECK)+"music.png");

        }
         toolbutton->setIcon(*(icon));
         transName=QApplication::translate("Check_Sate",files[i].toLatin1().data());

        toolbutton->setText(transName);
        toolbutton->setObjectName(files[i]);
        layout->addWidget(toolbutton,row,colum);


    }
}
 void  Document_manager_State::basebutton_clicked()
 {
    prcocess->start("/opt/Qt/applications/programs/serial");
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,可以使用QScrollArea控件来实现滚动条功能。具体实现步骤如下: 1. 在Qt Designer中或者手动创建一个QScrollArea控件,并设置其父控件。 2. 将需要显示的内容放置在QScrollArea控件内的QWidget控件中。 3. 设置QWidget控件的大小,使其大于QScrollArea控件的大小。 4. 将QWidget控件设置为QScrollArea控件的子控件。 5. 设置QScrollArea控件的滚动条策略,可以使用setVerticalScrollBarPolicy()和setHorizontalScrollBarPolicy()函数来设置。 6. 在需要滚动的时候,使用QScrollBar控件的setValue()函数来设置滚动条的值,从而实现滚动。 下面是一个示例代码: ```cpp // 创建QScrollArea控件和QWidget控件 QScrollArea *scrollArea = new QScrollArea(parent); QWidget *widget = new QWidget(scrollArea); // 设置QWidget控件的大小 widget->setMinimumSize(800, 600); // 设置QWidget控件为QScrollArea控件的子控件 scrollArea->setWidget(widget); // 设置滚动条策略 scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); // 滚动到指定位置 scrollArea->verticalScrollBar()->setValue(100); scrollArea->horizontalScrollBar()->setValue(100); ``` 在上面的代码中,我们创建了一个QScrollArea控件和一个QWidget控件,并将QWidget控件设置为QScrollArea控件的子控件。然后,我们设置了滚动条策略,并使用setValue()函数设置了滚动条的值,实现了滚动条功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值