• <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>

            逛奔的蝸牛

            我不聰明,但我會很努力

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

            =====================================Widget.h=====================================

            #ifndef WIDGET_H

            #define WIDGET_H


            #include <QWidget>


            namespace Ui {

                class Widget;

            }


            class Widget : public QWidget {

                Q_OBJECT

            public:

                Widget(QWidget *parent = 0);

                ~Widget();


            protected:

                virtual void changeEvent(QEvent *e);

                virtual bool eventFilter(QObject *watched, QEvent *e);

                void paintOnWidget(QWidget *w);


            private:

                Ui::Widget *ui;

            };


            #endif // WIDGET_H



            =====================================Widget.cpp=====================================

            #include "Widget.h"

            #include "ui_Widget.h"

            #include <QtGui/QPainter>


            Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {

                ui->setupUi(this);

                ui->widget->installEventFilter(this);

            }


            Widget::~Widget() {

                delete ui;

            }


            void Widget::changeEvent(QEvent *e) {

                QWidget::changeEvent(e);

                switch (e->type()) {

                case QEvent::LanguageChange:

                    ui->retranslateUi(this);

                    break;

                default:

                    break;

                }

            }


            bool Widget::eventFilter(QObject *watched, QEvent *e) {

                if (watched == ui->widget) {

                    if (e->type() == QEvent::Paint) {

                        paintOnWidget(ui->widget);

                        return true;

                    }

                }


                return QWidget::eventFilter(watched, e);

            }


            void Widget::paintOnWidget(QWidget *w) {

                QPainter painter(w);


                QFontMetrics metrics = painter.fontMetrics();

                int textHeight = metrics.ascent() + metrics.descent();


                int leftWidth = metrics.width(tr("9000")) + 5;

                int rightWidth = metrics.width(tr("()"));

                int width = w->size().width() - leftWidth - rightWidth;

                int height = w->size().height() - 3 * textHeight;


                // 繪制外框

                painter.drawRect(0, 0, w->size().width() -1, w->size().height() - 1);

                // 移動坐標(biāo)系

                //painter.translate(inset * 2, ui->yearWidget->size().height() - inset);

                painter.translate(leftWidth, 1.75 * textHeight + height);


                int totalCount = 9000; // 默認(rèn)每年收入9000件衣服

                int count = 10;        // 分成10

                float deltaX = width / 12.0f;         // x坐標(biāo)上每分的寬度

                float deltaY = (float)height / count; // y坐標(biāo)上每分的寬度



                // 畫橫坐標(biāo)

                painter.drawLine(0, 0, width, 0);

                for (int i = 1; i <= 12; ++i) {

                    QString month = tr("%1").arg(i);

                    int stringWidth = metrics.width(month);


                    // 繪制坐標(biāo)刻度

                    painter.drawLine(deltaX * i, 0, deltaX * i, 4);


                    // 繪制坐標(biāo)處的月

                    int monthX = deltaX * (i - 1) + ((deltaX - stringWidth) / 2);

                    painter.drawText(monthX, textHeight, month);

                }


                // 畫縱坐標(biāo)

                painter.drawLine(0, 0, 0, -height);

                painter.drawText(-metrics.width(tr("()")),

                                 -(deltaY * count + textHeight / 2 + metrics.descent()),

                                 tr("()"));

                for (int i = 1; i <= count; ++i) {

                    QString value = QString("%1").arg(i * totalCount / count);

                    int stringWidth = metrics.width(value);


                    // 繪制坐標(biāo)刻度

                    painter.drawLine(-4, -i * deltaY, 0, -i * deltaY);


                    // 繪制坐標(biāo)值

                    //painter.drawText(-stringWidth - 4, -i * deltaY + stringHeight / 2, value);

                    painter.drawText(-stringWidth - 4, -(deltaY * i + textHeight / 2 - metrics.ascent()), value);

                }


                //    // 繪制每個(gè)月收到的服飾

                //    painter.setBrush(Qt::BDiagPattern);

                //    for (int i = 0; i < yearList.size(); ++i) {

                //        painter.setPen(Qt::black);

                //        int fineryCount = yearList.at(i); // i + 1個(gè)月收到的服飾件數(shù)

                //        int h = fineryCount / (float)totalCount * height;

                //        painter.drawRect(deltaX * i + 2, 0, deltaX - 4, -h);

                //

                //        // 繪制收到的服飾件數(shù)

                //        QString fineryString = QString("%1").arg(fineryCount);

                //        int stringWidth = metrics.width(fineryString);

                //

                //        if (h > height) {

                //            h = height;

                //        }

                //

                //        painter.setPen(Qt::red);

                //        //painter.drawText(deltaX * i + (deltaX - stringWidth) / 2, -(h + metrics.descent()), fineryString);

                //    }

            }


            posted on 2009-10-31 13:38 逛奔的蝸牛 閱讀(10850) 評論(13)  編輯 收藏 引用 所屬分類: Qt

            評論

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像[未登錄] 2010-10-25 14:40 liu
            你好
            我build出現(xiàn)這個(gè)錯(cuò)誤
            /home/liuzhiyu/ta-build-desktop/../ta/Widget.cpp:44: error: invalid use of ‘class Ui::Widget’  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像 2010-10-25 14:49 逛奔的蝸牛
            @liu
            Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
            ui->setupUi(this);
            ui->widget->installEventFilter(this);
            }

            看這里,需要一個(gè)widget的form,因?yàn)樗侵苯佑肣tCreator拖的。
            在這個(gè)form里面,又有一個(gè)widget:ui->widget->這里就可以看到。
            為了方便,就直接這樣做了,關(guān)鍵的信息是使用EventFilter來處理繪制消息  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像[未登錄] 2010-10-26 15:44 liu
            我把
            ui->setupUi(this);
            ui->widget->installEventFilter(this);
            改為
            ui->setupUi(this);
            this->installEventFilter(this);

            后面
            bool Widget::eventFilter(QObject *watched, QEvent *e) {
            if (watched == ui->widget) {
            if (e->type() == QEvent::Paint) {
            paintOnWidget(ui->widget);
            return true;
            }
            }

            return QWidget::eventFilter(watched, e);
            }
            中的ui->widget也改為this就通過了  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像 2010-10-27 16:23 lily
            你好,
            我想將采集回來的數(shù)據(jù)(二維數(shù)組)在QT里將曲線顯示出來,可不可采用你文章里的方法,還是通過在form窗體上同個(gè)Drawer類來實(shí)現(xiàn)。
            謝謝!
            剛開始學(xué)QT,霧茫茫的~~~~  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像 2010-10-27 16:27 逛奔的蝸牛
            @lily
            此文中的方法,是當(dāng)時(shí)我處理繪制時(shí)有多個(gè)Widget,要在不同的情況對其進(jìn)行繪制,所以在要不同的Widget上繪制。

            如果你的數(shù)據(jù)只在一個(gè)Widget中繪制,就不需要這么麻煩,直接在一個(gè)Widget的paint方法中繪制就可以了。當(dāng)然,這樣做也沒有任何問題。  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像 2010-10-27 16:46 lily
            @逛奔的蝸牛
            好的,我再想想看,謝謝你~~~  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像[未登錄] 2010-10-27 22:17 liu
            @lily
            我的情況和你差不多 也是初學(xué)者 也是顯示數(shù)據(jù) 我的QQ: 977925831
            有空加我阿
              回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像[未登錄] 2010-10-27 22:32 liu
            @逛奔的蝸牛
            請問怎樣繪制多個(gè)窗口的坐標(biāo)圖像,本文是一個(gè)窗口,多個(gè)窗口的實(shí)現(xiàn),怎么辦?
            我想通過按鈕來切換幾副坐標(biāo)圖 樓主能不能指點(diǎn)迷津啊?謝謝。。。。  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像 2011-11-22 19:41 1263
            在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像[未登錄] 2011-12-08 21:29 jasper
            請問問題解決了沒?謝謝!  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像[未登錄] 2012-03-05 18:36 wang
            請問加上您注釋掉的那部分代碼后,有個(gè)yearList變量是在哪里定義的?  回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像 2014-06-26 20:35 風(fēng)過不知
            你的form 是指ui 里面的form layout控件嗎?@逛奔的蝸牛
              回復(fù)  更多評論
              

            # re: Qt:在widget的外部進(jìn)行繪制帶有坐標(biāo)軸的圖像 2014-06-26 21:24 風(fēng)過不知
            @liu
            真理!  回復(fù)  更多評論
              

            久久久久久国产精品无码下载| 中文国产成人精品久久不卡| 无码国产69精品久久久久网站| 久久亚洲av无码精品浪潮| MM131亚洲国产美女久久| 麻豆亚洲AV永久无码精品久久| 久久精品亚洲AV久久久无码| 日韩AV毛片精品久久久| 日日狠狠久久偷偷色综合96蜜桃| 久久国产免费直播| 欧美久久天天综合香蕉伊| 一本久久综合亚洲鲁鲁五月天| 亚洲国产精品无码久久青草| 久久性精品| 亚洲精品午夜国产VA久久成人| 狼狼综合久久久久综合网| 狠狠88综合久久久久综合网| 人人狠狠综合久久亚洲88| 久久精品国产只有精品66| 色狠狠久久综合网| 99国产欧美久久久精品蜜芽| 女人香蕉久久**毛片精品| 久久伊人色| 久久天堂AV综合合色蜜桃网| 中文字幕久久欲求不满| 亚洲国产成人乱码精品女人久久久不卡 | 少妇熟女久久综合网色欲| 少妇无套内谢久久久久| 国产精品久久久久久一区二区三区| 亚洲欧美日韩精品久久| 久久久久久曰本AV免费免费| 2020久久精品国产免费| 久久精品国产亚洲一区二区三区| 亚洲国产精品18久久久久久| 伊人丁香狠狠色综合久久| 久久久久久久综合狠狠综合| 久久精品无码午夜福利理论片 | 国产ww久久久久久久久久| 久久久国产视频| 久久久黄片| 狠狠色丁香久久婷婷综|