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

逛奔的蝸牛

我不聰明,但我會很努力

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

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 逛奔的蝸牛 閱讀(1875) 評論(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>
            国产精品日韩在线| 亚洲精品综合在线| 狠狠久久五月精品中文字幕| 久久精品麻豆| 久久精品国产999大香线蕉| 亚洲一区二区三区午夜| 一区二区电影免费观看| 9i看片成人免费高清| 99av国产精品欲麻豆| 一区二区高清视频| 亚洲在线视频免费观看| 亚洲欧美日韩一区二区在线| 亚洲免费在线精品一区| 午夜精品一区二区三区在线| 性欧美video另类hd性玩具| 久久久久中文| 久久av老司机精品网站导航| 国产精品久久久久久一区二区三区| 久久另类ts人妖一区二区| 老司机精品导航| 国产精品日韩二区| 亚洲动漫精品| 久久精品免视看| 蜜桃久久精品乱码一区二区| 蜜乳av另类精品一区二区| 欧美日韩国产影院| 又紧又大又爽精品一区二区| 亚洲欧美日本伦理| 亚洲黄页一区| 久久精品官网| 国产丝袜一区二区| 亚洲欧美日本国产有色| 亚洲高清不卡av| 久久网站热最新地址| 国产精品一区二区久久 | 欧美一二三视频| 亚洲国产精品成人一区二区| 欧美在线播放视频| 国产视频丨精品|在线观看| 亚洲一区二区三区视频| 亚洲日本中文字幕区| 美女视频黄免费的久久| 亚洲成人资源网| 欧美成人四级电影| 欧美国产日韩免费| 99国内精品| 亚洲影视在线播放| 国产亚洲精品自拍| 欧美成人精品高清在线播放| 久久这里只有| 一区二区三区高清视频在线观看| 亚洲国产毛片完整版 | 久久精品国产清自在天天线| 9l国产精品久久久久麻豆| 亚洲狠狠婷婷| 欧美高清成人| 国产精品porn| 欧美阿v一级看视频| 欧美亚一区二区| 久久一区二区三区av| 蜜臀久久99精品久久久画质超高清| 亚洲国产成人av| 亚洲女人天堂av| 日韩亚洲精品视频| 久久亚洲国产精品一区二区| 中文日韩欧美| 欧美黄色免费| 免费成人高清视频| 国产精品一级在线| 妖精成人www高清在线观看| 伊人久久大香线蕉综合热线 | 免费亚洲网站| 国产精品三上| 亚洲欧美第一页| 一本色道久久综合亚洲91| 蜜臀av一级做a爰片久久| 久久精品在这里| 国产视频在线一区二区 | 麻豆成人91精品二区三区| 国产精品igao视频网网址不卡日韩| 老司机精品视频网站| 国内精品久久久久影院 日本资源| 亚洲美女91| 亚洲女爱视频在线| 国产精品二区在线观看| 亚洲精品免费网站| 欧美jjzz| 一本色道久久加勒比精品| 一本综合久久| 国产一区二区你懂的| 久久国产欧美| 日韩视频一区二区| 久久漫画官网| 在线视频你懂得一区| 国产精品午夜在线观看| 久久精品视频亚洲| 欧美亚洲在线观看| 亚洲综合99| 香蕉久久夜色| 亚洲精品久久7777| 国产一区二区三区四区在线观看| 久久国产主播精品| 亚洲视频在线看| 欧美福利视频一区| 久久久久久亚洲综合影院红桃| 亚洲久久成人| 尤物99国产成人精品视频| 欧美四级在线| 欧美日韩免费一区二区三区视频 | 欧美一区二区三区四区视频| 91久久国产自产拍夜夜嗨| 久久久久这里只有精品| 欧美一区2区三区4区公司二百| 夜夜爽www精品| 亚洲视频一二三| 亚洲精品偷拍| 亚洲国产毛片完整版 | 尤物网精品视频| 国产专区综合网| 一区二区久久久久| 亚洲片区在线| 99视频精品全国免费| 99re6热在线精品视频播放速度| 亚洲高清不卡在线观看| 欧美激情一区二区三区在线视频观看 | 亚洲精品一区在线| 99这里有精品| 欧美亚洲在线播放| 久久青青草综合| 欧美另类综合| 国产欧美视频在线观看| 在线日韩中文| 亚洲自拍偷拍视频| 久久欧美中文字幕| 国模一区二区三区| 国产精品国产一区二区| 国产乱理伦片在线观看夜一区| 国产亚洲精品久久久久婷婷瑜伽 | 欧美一区=区| 欧美福利网址| 国产亚洲一区二区三区在线观看| 亚洲国产精品久久人人爱蜜臀| 99riav国产精品| 欧美激情一区二区三区在线| 亚洲视频免费看| 欧美日韩午夜剧场| 永久免费精品影视网站| 久久国内精品视频| 99伊人成综合| 国产精品毛片大码女人| 亚洲人成在线播放| 欧美激情久久久久久| 久久久久久久一区二区三区| 亚洲在线观看免费视频| 欧美日韩国产天堂| 亚洲美女精品久久| 亚洲三级电影全部在线观看高清| 久久久久免费视频| 在线免费高清一区二区三区| 免费在线看一区| 欧美成人免费全部| 在线视频一区观看| 亚洲欧美视频在线观看| 国产精品视频久久一区| 久久国内精品自在自线400部| 亚洲欧美激情视频在线观看一区二区三区 | 久久精品亚洲| 麻豆成人av| 亚洲视频中文字幕| 欧美一级大片在线观看| 亚洲国产精品一区二区www| 亚洲人成在线播放网站岛国| 国产精品日韩在线播放| 欧美99久久| 国产午夜亚洲精品不卡| 欧美91福利在线观看| 国产精品va在线播放我和闺蜜| 欧美一级一区| 欧美高清在线一区| 看欧美日韩国产| 国产麻豆视频精品| 99国产精品久久久久久久久久| 国产一区二区三区在线观看视频 | 亚洲在线成人| 黄色成人片子| 亚洲欧美电影院| 99综合视频| 亚洲一区999| 亚洲欧洲精品一区二区三区| 在线亚洲欧美视频| 亚洲日韩欧美视频| 久久蜜桃精品| 久久天天躁夜夜躁狠狠躁2022 | 亚洲经典视频在线观看| 亚洲欧美另类中文字幕| 亚洲欧美日韩精品久久久久| 欧美精品日韩精品| 日韩视频三区| 亚洲综合色丁香婷婷六月图片| 欧美日韩国产片|