Qt 滚动区

来源:互联网 发布:tcp协议栈源码 编辑:程序博客网 时间:2024/05/22 13:46

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");
 }

原创粉丝点击