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

逛奔的蝸牛

我不聰明,但我會很努力

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

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 逛奔的蝸牛 閱讀(1871) 評論(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>
            欧美偷拍另类| 欧美在线观看www| 欧美日韩中国免费专区在线看| 亚洲盗摄视频| 欧美成人影音| 欧美精品免费观看二区| 日韩午夜精品| 亚洲小说欧美另类婷婷| 国产三级欧美三级| 欧美黑人国产人伦爽爽爽| 欧美成人xxx| 亚洲欧美日本日韩| 久久嫩草精品久久久精品一| 亚洲青涩在线| 亚洲一区二区毛片| 久热综合在线亚洲精品| 久久视频一区| 欧美成人有码| 欧美一区二区三区免费视| 久久精品国产精品亚洲| 亚洲电影在线免费观看| 亚洲最新视频在线| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲国产精彩中文乱码av在线播放| 欧美激情一区二区三区四区 | 91久久亚洲| 国产精品美女在线| 欧美成人精品三级在线观看| 欧美mv日韩mv国产网站| 欧美一级黄色录像| 美女在线一区二区| 久久9热精品视频| 免费成人黄色av| 久久精品国产第一区二区三区最新章节| 久久久久久电影| 午夜精品久久久久久久男人的天堂| 久久精品欧洲| 性欧美1819sex性高清| 欧美福利电影在线观看| 久久国产福利| 欧美视频一区二区三区| 欧美激情第10页| 国产三级欧美三级| 亚洲一区二区三区中文字幕在线| 亚洲人成网站色ww在线| 性欧美暴力猛交另类hd| 亚洲天堂av在线免费| 美女免费视频一区| 久久一二三四| 国产亚洲一区二区三区| 亚洲午夜视频在线| 一本色道久久综合亚洲精品高清| 久久久久久9| 久久一二三国产| 国产亚洲欧美日韩精品| 亚洲综合激情| 亚洲综合视频网| 欧美午夜精品久久久久久浪潮 | 久久亚洲国产精品日日av夜夜| 欧美视频导航| av成人手机在线| 国产精品99久久99久久久二8 | 免费在线成人| 欧美激情 亚洲a∨综合| 在线观看不卡| 久久免费观看视频| 欧美不卡福利| 亚洲国产另类久久精品| 免费不卡欧美自拍视频| 牛夜精品久久久久久久99黑人| 韩国精品主播一区二区在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲午夜精品一区二区三区他趣| 欧美日韩精品久久久| 夜夜嗨网站十八久久| 亚洲一区二区三区乱码aⅴ| 欧美手机在线| 亚洲欧美成人一区二区三区| 欧美在线看片| 尤物九九久久国产精品的分类| 久久午夜电影| 亚洲激情一区二区三区| 亚洲视频在线观看视频| 国产精品久久久一区二区| 午夜精品久久久久久99热软件| 久久九九精品99国产精品| 极品少妇一区二区三区| 欧美91视频| 在线亚洲美日韩| 久久国产乱子精品免费女| **欧美日韩vr在线| 欧美日本免费| 午夜一区二区三视频在线观看| 裸体一区二区三区| 日韩网站在线看片你懂的| 国产精品地址| 久久久久久亚洲精品不卡4k岛国| 欧美激情综合色| 亚洲在线观看免费视频| 国产综合视频| 欧美久久久久久蜜桃| 亚洲一区久久| 亚洲第一页中文字幕| 亚洲综合电影一区二区三区| 狠狠久久亚洲欧美专区| 欧美美女日韩| 久久久91精品国产一区二区三区 | 午夜综合激情| 亚洲精品日韩久久| 老**午夜毛片一区二区三区| 99视频在线观看一区三区| 国产午夜精品全部视频在线播放 | 国产精品久久久久天堂| 狼人天天伊人久久| 亚洲欧美综合精品久久成人| 你懂的国产精品永久在线| 午夜精品区一区二区三| 国产精品无人区| 亚洲一级高清| 日韩视频一区二区三区在线播放| 欧美福利视频| 亚洲欧美日韩综合一区| 先锋亚洲精品| 中日韩美女免费视频网址在线观看| 一区二区三区免费看| 国产自产2019最新不卡| 99在线|亚洲一区二区| 国产午夜精品全部视频播放| 亚洲欧洲日产国产网站| 国产欧美精品一区| 亚洲免费福利视频| 亚洲日本中文字幕免费在线不卡| 亚洲一卡久久| 亚洲视频在线视频| 国产精品www994| 欧美电影免费| 欧美日韩国产页| 美国十次了思思久久精品导航| 午夜欧美不卡精品aaaaa| 国产日韩欧美高清免费| 欧美日韩亚洲国产一区| 欧美激情第4页| 欧美精品午夜| 欧美日韩国产天堂| 欧美日韩精品欧美日韩精品| 欧美精品在线视频观看| 欧美激情一区二区三区在线| 免费观看日韩| 欧美大片在线观看一区二区| 久久综合狠狠综合久久综合88| 久久久不卡网国产精品一区| 欧美中文在线免费| 久久久久91| 美女在线一区二区| 欧美日本一区二区高清播放视频| 欧美日本免费| 国产精品高潮呻吟久久av黑人| 国产精品久久久久久久久婷婷 | 午夜精品视频| 国产精品试看| 国产日本欧美一区二区三区在线| 国产精品羞羞答答| 红桃视频国产一区| 亚洲精品久久久蜜桃| 一区二区激情视频| 午夜日韩福利| 麻豆久久精品| 亚洲精选视频免费看| 亚洲一区二区三区国产| 久久国产一二区| 欧美激情亚洲激情| 国产精品视频内| 在线高清一区| 亚洲天堂av电影| 久久久久免费| 亚洲三级色网| 亚洲欧美在线视频观看| 奶水喷射视频一区| 国产精品捆绑调教| 亚洲福利视频一区二区| 亚洲深夜av| 免费成人网www| 一区二区欧美国产| 久久这里有精品15一区二区三区| 欧美激情中文不卡| 亚洲国产精品久久久久| 日韩亚洲视频在线| 一本不卡影院| 久久午夜视频| 国产精品综合视频| 99国产精品99久久久久久| 国产精品av一区二区| 男男成人高潮片免费网站| 国产精品久久久久久久久久ktv| 娇妻被交换粗又大又硬视频欧美| 亚洲视频在线观看| 亚洲高清一区二| 久久激情综合网| 国产精品亚洲欧美| 亚洲一区在线直播|