青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::

The titlebar belongs to the OS and we don't have control over that one. You can create your own titlebar, but note that this requires some work. In order to create your own titlebar then make a QWidget subclass that contains three toolbuttons that handle the close, minimize and maximize events in addition to the moving of the window. Then make a QFrame subclass which does not have a titlebar provided via the window system. This is done by setting theQt::FramelessWindowHint window flag, however this will make it impossible to resize or move the window via the window system. What can be done is you can add your custom titlbar as a private member to the frame and add the it first to the frame's vertical layout. The frame also needs a content widget which allows widgets to be added to it. Finally the QFrame subclass needs to reimplement the mouse events to handle the resizing and moving of the window. The example below demonstrates how this can be achieved.

#include <QApplication>

#include <QtGui>

#include <QLayout>

#include <QStyle>


class TitleBar : public QWidget {

    Q_OBJECT

public:

    TitleBar(QWidget *parent) {

        // Don't let this widget inherit the parent's backround color

        setAutoFillBackground(true);

        // Use a brush with a Highlight color role to render the background 

        setBackgroundRole(QPalette::Highlight);

        

        minimize = new QToolButton(this);

        maximize = new QToolButton(this);

        close= new QToolButton(this);

        

        // Use the style to set the button pixmaps

        QPixmap pix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);

        close->setIcon(pix);

        

        maxPix = style()->standardPixmap(QStyle::SP_TitleBarMaxButton);

        maximize->setIcon(maxPix);

        

        pix = style()->standardPixmap(QStyle::SP_TitleBarMinButton);

        minimize->setIcon(pix);

        

        restorePix = style()->standardPixmap(QStyle::SP_TitleBarNormalButton);

        

        minimize->setMinimumHeight(20);

        close->setMinimumHeight(20);

        maximize->setMinimumHeight(20);

        

        

        QLabel *label = new QLabel(this);

        label->setText("Window Title");

        parent->setWindowTitle("Window Title");

        

        QHBoxLayout *hbox = new QHBoxLayout(this);

        

        hbox->addWidget(label);

        hbox->addWidget(minimize);

        hbox->addWidget(maximize);

        hbox->addWidget(close);

        

        hbox->insertStretch(1, 500);

        hbox->setSpacing(0);

        setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

        

        maxNormal = false;

        

        connect(close, SIGNAL( clicked() ), parent, SLOT(close() ) );

        connect(minimize, SIGNAL( clicked() ), this, SLOT(showSmall() ) );

        connect(maximize, SIGNAL( clicked() ), this, SLOT(showMaxRestore() ) );

    }

    

public slots:

    void showSmall() {

        parentWidget()->showMinimized();

    }

    

    void showMaxRestore() {

        if (maxNormal) {

            parentWidget()->showNormal();

            maxNormal = !maxNormal;

            maximize->setIcon(maxPix);

        } else {

            parentWidget()->showMaximized();

            maxNormal = !maxNormal;

            maximize->setIcon(restorePix);

        }

    }

protected:

    void mousePressEvent(QMouseEvent *me) {

        startPos = me->globalPos();

        clickPos = mapToParent(me->pos());

    }

    void mouseMoveEvent(QMouseEvent *me) {

        if (maxNormal)

            return;

        parentWidget()->move(me->globalPos() - clickPos);

    }

    

private:

    QToolButton *minimize;

    QToolButton *maximize;

    QToolButton *close;

    QPixmap restorePix, maxPix;

    bool maxNormal;

    QPoint startPos;

    QPoint clickPos;

};


class Frame : public QFrame {

public:

    

    Frame() {

        m_mouse_down = false;

        setFrameShape(Panel);

        

        // Make this a borderless window which can't

        // be resized or moved via the window system

        setWindowFlags(Qt::FramelessWindowHint);

        setMouseTracking(true);

        

        m_titleBar = new TitleBar(this);

        

        m_content = new QWidget(this);

        

        QVBoxLayout *vbox = new QVBoxLayout(this);

        vbox->addWidget(m_titleBar);

        vbox->setMargin(0);

        vbox->setSpacing(0);

        

        QVBoxLayout *layout = new QVBoxLayout(this);

        layout->addWidget(m_content);

        layout->setMargin(5);

        layout->setSpacing(0);

        vbox->addLayout(layout);

    }

    

    // Allows you to access the content area of the frame

    // where widgets and layouts can be added

    QWidget *contentWidget() const { return m_content; }

    

    TitleBar *titleBar() const { return m_titleBar; }

    

    void mousePressEvent(QMouseEvent *e) {

        m_old_pos = e->pos();

        m_mouse_down = e->button() == Qt::LeftButton;

    }

    

    void mouseMoveEvent(QMouseEvent *e) {

        int x = e->x();

        int y = e->y();

        

        if (m_mouse_down) {

            int dx = x - m_old_pos.x();

            int dy = y - m_old_pos.y();

            

            QRect g = geometry();

            

            if (left)

                g.setLeft(g.left() + dx);

            if (right)

                g.setRight(g.right() + dx);

            if (bottom)

                g.setBottom(g.bottom() + dy);

            

            setGeometry(g);

            

            m_old_pos = QPoint(!left ? e->x() : m_old_pos.x(), e->y());

        } else {

            QRect r = rect();

            left = qAbs(x - r.left()) <= 5;

            right = qAbs(x - r.right()) <= 5;

            bottom = qAbs(y - r.bottom()) <= 5;

            bool hor = left | right;

            

            if (hor && bottom) {

                if (left)

                    setCursor(Qt::SizeBDiagCursor);

                else 

                    setCursor(Qt::SizeFDiagCursor);

            } else if (hor) {

                setCursor(Qt::SizeHorCursor);

            } else if (bottom) {

                setCursor(Qt::SizeVerCursor);

            } else {

                setCursor(Qt::ArrowCursor);

            }

        }

    }

    

    void mouseReleaseEvent(QMouseEvent *e) {

        m_mouse_down = false;

    }

    

private:

    TitleBar *m_titleBar;

    QWidget *m_content;

    QPoint m_old_pos;

    bool m_mouse_down;

    bool left, right, bottom;

};



#include "main.moc"


int main(int argc, char **argv) {

    QApplication app(argc, argv);

    

    Frame box;

    box.move(0,0);

    

    QVBoxLayout *l = new QVBoxLayout(box.contentWidget());

    l->setMargin(0);

    QTextEdit *edit = new QTextEdit(box.contentWidget());

    l->addWidget(edit);

    

    box.show();

    return app.exec();    

}


From: http://qt.nokia.com/developer/faqs/535

posted on 2009-11-07 17:37 逛奔的蝸牛 閱讀(1878) 評論(0)  編輯 收藏 引用 所屬分類: Qt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产精品电影| 欧美风情在线观看| 一本不卡影院| 欧美日韩xxxxx| 一二美女精品欧洲| 亚洲精品专区| 国产精品精品视频| 亚洲欧美中文另类| 欧美亚洲视频在线看网址| 国产精品自拍小视频| 久久精品国产第一区二区三区| 先锋影院在线亚洲| 尤物yw午夜国产精品视频| 麻豆精品在线视频| 欧美精品久久久久久久久老牛影院| 亚洲人人精品| 亚洲午夜三级在线| 国精品一区二区三区| 欧美丰满高潮xxxx喷水动漫| 欧美精品激情| 午夜欧美不卡精品aaaaa| 午夜伦欧美伦电影理论片| 狠狠色综合色区| 亚洲国产精品日韩| 欧美区视频在线观看| 亚洲欧美国产高清| 久久精品国产91精品亚洲| 亚洲精品久久久久久久久| 亚洲一本大道在线| 亚洲国产另类 国产精品国产免费| 亚洲精品美女免费| 国产一区二区三区在线观看精品 | 久久久久国产精品厨房| 亚洲美女免费精品视频在线观看| 亚洲天堂成人在线观看| 136国产福利精品导航网址应用 | 欧美影院视频| 每日更新成人在线视频| 亚洲欧美精品suv| 免费成人小视频| 欧美亚洲视频| 欧美高清在线播放| 久久久久在线观看| 欧美日韩美女| 欧美大片在线观看| 国产欧美一区二区精品秋霞影院| 亚洲日本va午夜在线电影| 国内精品模特av私拍在线观看| 亚洲久久成人| 亚洲欧洲日韩综合二区| 久久精品国产久精国产一老狼| 一本到12不卡视频在线dvd| 久久久蜜臀国产一区二区| 亚洲欧美日韩系列| 欧美日韩色一区| 免费久久99精品国产| 国产美女精品一区二区三区 | 久久成人资源| 国产精品激情电影| 亚洲精品综合在线| 日韩视频在线免费观看| 老司机午夜精品视频| 久热精品在线| 国产一区二区三区久久精品| 亚洲自拍偷拍一区| 亚洲一区二区三区在线视频| 欧美精品一区二区三区久久久竹菊| 久热成人在线视频| 一区二区自拍| 久久aⅴ国产欧美74aaa| 久久激情久久| 国产一区二区精品久久99| 欧美亚洲免费在线| 久久精品国内一区二区三区| 国产一区二区高清不卡| 久久精品综合网| 蜜臀av一级做a爰片久久| 一区二区在线观看视频| 久久综合九色欧美综合狠狠| 免费欧美高清视频| 亚洲人体影院| 欧美日韩一区二区视频在线| aⅴ色国产欧美| 午夜亚洲一区| 樱桃视频在线观看一区| 久热精品视频在线| 亚洲片国产一区一级在线观看| 99re国产精品| 欧美大片第1页| 99www免费人成精品| 99天天综合性| 国产精品免费久久久久久| 亚洲在线免费观看| 久久亚洲综合色一区二区三区| 国内精品久久久久伊人av| 美腿丝袜亚洲色图| a4yy欧美一区二区三区| 久久国产精品毛片| 亚洲国产精品成人综合| 欧美日韩hd| 性色av一区二区三区红粉影视| 蜜桃av综合| 亚洲一区二区三区影院| 狠狠色狠色综合曰曰| 欧美成在线视频| 亚洲影院高清在线| 久久理论片午夜琪琪电影网| 亚洲日本视频| 国产日韩欧美日韩| 欧美电影在线观看| 亚洲欧美日韩一区二区在线 | 在线亚洲高清视频| 国产精品一区视频| 欧美jizz19性欧美| 亚洲午夜av在线| 亚洲第一区在线观看| 亚洲色图综合久久| 在线观看视频一区二区| 欧美日韩一区二区视频在线| 久久精品三级| 亚洲午夜av在线| 亚洲国产一区在线观看| 久久久久成人精品| 亚洲综合首页| 最新精品在线| 精品成人a区在线观看| 欧美香蕉视频| 欧美精品在线网站| 久久久青草婷婷精品综合日韩 | 久久久精品一区| 亚洲私人影院| 亚洲黄一区二区| 红桃视频国产精品| 国产精品制服诱惑| 欧美性一区二区| 欧美日本精品一区二区三区| 久久久久久久久久久久久9999 | 免费在线亚洲欧美| 久久成年人视频| 亚洲欧美综合一区| 在线亚洲精品福利网址导航| 亚洲三级免费电影| 亚洲精品国产精品国自产在线| 精品999在线观看| 一区二区视频免费在线观看| 国产一区二区高清视频| 国产一区二区黄色| 国产欧美日本一区视频| 国产精品卡一卡二| 国产精品一区免费观看| 国产精品一二三视频| 国产麻豆综合| 国产一级精品aaaaa看| 国产一区二区三区免费观看| 国产日韩专区在线| 国产午夜精品全部视频在线播放| 国产毛片一区| 精品999久久久| 亚洲国产福利在线| 亚洲精品欧美在线| 亚洲深夜福利视频| 亚洲欧美美女| 久久久国产成人精品| 免费观看成人| 亚洲人成高清| 一区二区欧美日韩视频| 亚洲女性裸体视频| 久久xxxx精品视频| 免费91麻豆精品国产自产在线观看| 免费久久99精品国产| 欧美三区不卡| 国产主播精品在线| 亚洲精品无人区| 亚洲男人第一av网站| 久久天堂国产精品| 亚洲国产成人精品久久| 一本久久综合亚洲鲁鲁| 欧美一区二区三区视频在线观看| 久久九九免费视频| 欧美美女操人视频| 国产亚洲激情在线| 亚洲欧洲一区二区三区| 亚洲欧美精品| 欧美大胆a视频| 亚洲一区二区三区免费观看| 久久精品在线免费观看| 欧美日韩国产美| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧美中文在线视频| 蜜臀av国产精品久久久久| 欧美日韩一区二区欧美激情| 好看的日韩视频| 一本色道久久综合| 久久精品免费| 99精品久久久| 免费在线亚洲欧美| 国产又爽又黄的激情精品视频| 亚洲精品婷婷| 免费试看一区| 欧美亚洲专区|