Qt 滾動區

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.