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

                }


                //    // 繪制每個月收到的服飾

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

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

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

                //        int fineryCount = yearList.at(i); // i + 1個月收到的服飾件數(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 逛奔的蝸牛 閱讀(10868) 評論(13)  編輯 收藏 引用 所屬分類: Qt

            評論

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

            # re: Qt:在widget的外部進行繪制帶有坐標(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);
            }

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

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

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

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

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

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

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

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

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

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

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

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

            无码任你躁久久久久久久| 91性高湖久久久久| 久久午夜福利电影| 一本色道久久HEZYO无码| 久久夜色精品国产亚洲| 欧美精品乱码99久久蜜桃| 国产午夜福利精品久久| 久久99热这里只有精品国产| 久久九九久精品国产| 东京热TOKYO综合久久精品| 久久亚洲2019中文字幕| 伊人久久久AV老熟妇色| 办公室久久精品| 亚洲国产精品久久电影欧美| 99久久做夜夜爱天天做精品| 久久精品国产亚洲麻豆| 久久久噜噜噜久久熟女AA片| 中文无码久久精品| 久久久WWW成人| 1000部精品久久久久久久久| 精品久久久久久中文字幕| 欧美久久久久久| 亚洲欧美成人综合久久久| 国内精品久久久久影院网站| 国产精品99久久免费观看| 国产精品亚洲综合久久| 久久精品国产一区二区电影| 97久久天天综合色天天综合色hd| 奇米影视7777久久精品人人爽| 精品久久久久久无码人妻热| 91久久精品视频| 亚洲午夜久久影院| 91精品婷婷国产综合久久| 久久国产免费观看精品| 久久精品9988| 丁香久久婷婷国产午夜视频| 嫩草影院久久国产精品| 99久久婷婷国产综合精品草原| 成人久久久观看免费毛片| 久久久精品免费国产四虎| 国产69精品久久久久9999|