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

逛奔的蝸牛

我不聰明,但我會很努力

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

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>
            正在播放亚洲一区| 欧美91大片| 欧美在线视频播放| 欧美日韩精品福利| 国产视频久久久久久久| 日韩一区二区精品视频| 久久综合激情| 欧美一区二区视频在线观看2020| 欧美午夜激情视频| 亚洲精选视频免费看| 一本色道久久综合| 亚洲一区二区三区中文字幕在线| 久久中文精品| 先锋影音久久久| 欧美专区18| 激情一区二区三区| 欧美激情一区在线观看| 欧美午夜性色大片在线观看| 亚洲欧洲一区| 免费国产一区二区| 亚洲激情校园春色| 亚洲国产精品黑人久久久 | 久久久国产精品一区| 亚洲视频日本| 国产一区二区三区四区在线观看 | 午夜精品一区二区三区在线播放| 在线视频欧美日韩精品| 国产精品国产a| 久久成人精品电影| 久久久久www| 亚洲日韩欧美视频一区| 亚洲三级免费| 国产精品视频不卡| 久久综合色88| 欧美成年人视频| 在线一区亚洲| 午夜免费日韩视频| 影音先锋另类| 午夜精品福利一区二区三区av| 亚洲欧美日韩精品久久久| 一区二区三区在线免费视频| 亚洲第一主播视频| 国产精品免费一区豆花| 久久久www成人免费毛片麻豆| 久久一区二区三区四区| 欧美在线不卡| 国产亚洲精品久| 日韩一级网站| 99精品视频一区| 你懂的网址国产 欧美| 国产欧美精品日韩区二区麻豆天美| 国产精品亚洲综合一区在线观看 | 欧美激情乱人伦| 欧美亚洲第一页| 麻豆av福利av久久av| 欧美日韩和欧美的一区二区| 久久精品中文字幕一区| 亚洲综合电影| 久久精品最新地址| 夜夜躁日日躁狠狠久久88av| 久久精品国产99精品国产亚洲性色| 亚洲精品日日夜夜| 欧美综合77777色婷婷| 亚洲视频综合| 欧美成人高清视频| 久久久精品免费视频| 欧美精选一区| 欧美1区免费| 国产一区二区中文| 亚洲午夜性刺激影院| 亚洲精品无人区| 久久青青草综合| 久久丁香综合五月国产三级网站| 欧美日产在线观看| 欧美激情在线有限公司| 国内精品一区二区| 亚洲自拍偷拍视频| 亚洲一区二区欧美日韩| 欧美国产日本高清在线| 免费成人黄色片| 国产一区二区三区奇米久涩 | 欧美老女人xx| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产亚洲在线| 欧美在线播放视频| 久久综合图片| 亚洲国产精品一区二区久 | 国产美女精品视频免费观看| 国内精品模特av私拍在线观看| 欧美国产乱视频| 久久精品欧洲| 久久精品99久久香蕉国产色戒| 99精品国产99久久久久久福利| 免费视频亚洲| 久久精品日韩| 欧美成人一区二区三区| 久久riav二区三区| 亚洲欧美日韩一区二区在线 | 国产一区二区三区四区在线观看| 亚洲伦理久久| 亚洲理论电影网| 欧美日韩国产专区| 老司机精品导航| 日韩视频一区二区三区在线播放免费观看| 欧美在线亚洲一区| 日韩亚洲精品视频| 99视频精品免费观看| 蘑菇福利视频一区播放| 久热re这里精品视频在线6| 国产亚洲a∨片在线观看| 久久成人精品视频| 亚洲乱码视频| 亚洲欧美激情诱惑| 一区二区三区四区五区精品视频| 洋洋av久久久久久久一区| 欧美激情第三页| 亚洲毛片在线观看| 久久久精彩视频| 蜜臀久久久99精品久久久久久| 国产深夜精品福利| 欧美在线一区二区三区| 欧美亚洲一区二区在线| 欧美成人综合| 国产免费一区二区三区香蕉精| 欧美日韩精品中文字幕| 国产精品久久久久久久午夜片| 国产精品私房写真福利视频| 国产午夜精品福利| 欧美1区3d| 免费一级欧美在线大片| 亚洲三级毛片| 欧美**字幕| 亚洲欧美精品| 欧美激情一区| 一区二区成人精品 | 牛牛精品成人免费视频| 亚洲美女诱惑| 久久亚洲精品一区二区| 亚洲国产精品一区二区www在线| 国产精品家教| 久久精品av麻豆的观看方式| 一区二区精品在线观看| 狂野欧美激情性xxxx| 亚洲欧美高清| 国产精品美腿一区在线看| 男人天堂欧美日韩| 久久国产精品久久精品国产| 亚洲精品美女| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久综合狠狠综合久久综合88| 在线视频亚洲| 免费观看在线综合| 久久久久.com| 中文亚洲视频在线| 亚洲黄色三级| 欧美在线视频网站| 亚洲午夜精品福利| 欧美午夜在线视频| 9国产精品视频| 欧美一级午夜免费电影| 亚洲精品资源美女情侣酒店| 国产亚洲综合精品| 欧美性片在线观看| 亚洲国产精品一区二区www在线| 国产一区二区精品久久91| 国产精品久久77777| 欧美激情精品久久久久久大尺度| 鲁鲁狠狠狠7777一区二区| 欧美日韩一区在线| 一本久久知道综合久久| 亚洲欧美国产另类| 久久久久这里只有精品| 亚洲国产精品尤物yw在线观看| 国产精品视频成人| 亚洲欧洲精品成人久久奇米网| 免费成人av在线看| 国产欧美日韩精品专区| 久久久国产精彩视频美女艺术照福利| 怡红院av一区二区三区| 国产精品高清网站| 国产精品一区在线观看| 欧美日韩在线影院| 欧美精品乱人伦久久久久久| 久久久久国产精品一区二区| 亚洲欧美变态国产另类| 欧美一区二区三区精品电影| 亚洲欧美日韩视频二区| 亚洲午夜性刺激影院| 亚洲视频一区二区免费在线观看| 亚洲人成高清| 一区二区高清视频在线观看| 日韩视频在线免费观看| 日韩视频免费观看| 亚洲美女少妇无套啪啪呻吟| 欧美一区成人| 免播放器亚洲一区| 一区在线影院| 欧美精品二区| 欧美美女操人视频| 欧美日韩另类字幕中文|