亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tutorial2-06.html

?? Linux下Qt編程的電子書
?? HTML
?? 第 1 頁 / 共 2 頁
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Translator" content="Cavendish">
<meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt">
<title>畫布控制</title>
<style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; font-family: "Times New Roman" }
--></style>
</head>
<body>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
 <a href="index.html">
<font color="#004faf">主頁</font></a>
 | <a href="classes.html">
<font color="#004faf">所有的類</font></a>
 | <a href="mainclasses.html">
<font color="#004faf">主要的類</font></a>
 | <a href="annotated.html">
<font color="#004faf">注釋的類</font></a>
 | <a href="groups.html">
<font color="#004faf">分組的類</font></a>
 | <a href="functions.html">
<font color="#004faf">函數</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table>
<h1 align=center>畫布控制</h1>


<p> 
<p> 我們在畫布上畫餅形區域(或者條形圖表條),和所有的標簽。畫布是通過畫布視圖來呈現給用戶的。drawElements()函數被調用從而在需要的時候重新繪制畫布。
<p> (由<tt>chartform_canvas.cpp</tt>展開。)
<p> <h2> drawElements()
</h2>
<a name="1"></a><p> 

<pre>    void ChartForm::drawElements()
    {
        <a href="qcanvasitemlist.html">QCanvasItemList</a> list = m_canvas-&gt;allItems();
        for ( QCanvasItemList::iterator it = list.<a href="qvaluelist.html#begin">begin</a>(); it != list.<a href="qvaluelist.html#end">end</a>(); ++it )
            delete *it;
</pre>
<p> 我們在drawElements()中所作的第一件事是刪除所有已經存在的畫布條目。
<p> <pre>            // 360 * 16為一個餅形,Qt中使用的是16倍的度數(就是它的一個圓周為360x16)
        int scaleFactor = m_chartType == PIE ? 5760 :
                            m_chartType == VERTICAL_BAR ? m_canvas-&gt;height() :
                                m_canvas-&gt;width();
</pre>
<p> 接下來我們根據要繪制的圖表的種類來計算比例因子。
<p> <pre>        double biggest = 0.0;
        int count = 0;
        double total = 0.0;
        static double scales[MAX_ELEMENTS];

        for ( int i = 0; i &lt; MAX_ELEMENTS; ++i ) {
            if ( m_elements[i].isValid() ) {
                double value = m_elements[i].value();
                count++;
                total += value;
                if ( value &gt; biggest )
                    biggest = value;
                scales[i] = m_elements[i].value() * scaleFactor;
            }
        }

        if ( count ) {
                // 第二個循環是因為總量和最大的
            for ( int i = 0; i &lt; MAX_ELEMENTS; ++i )
                if ( m_elements[i].isValid() )
                    if ( m_chartType == PIE )
                        scales[i] = (m_elements[i].value() * scaleFactor) / total;
                    else
                        scales[i] = (m_elements[i].value() * scaleFactor) / biggest;
</pre>
<p> 我們需要知道這里有多少值、最大的值和值的總和,這樣我們就可以正確地按比例創建餅形區域或條形了。我們把比例值存放在<tt>scales</tt>數組中。
<p> <pre>            switch ( m_chartType ) {
                case PIE:
                    drawPieChart( scales, total, count );
                    break;
                case VERTICAL_BAR:
                    drawVerticalBarChart( scales, total, count );
                    break;
                case HORIZONTAL_BAR:
                    drawHorizontalBarChart( scales, total, count );
                    break;
            }
        }
</pre>
<p> 既然我們已經知道了必需的信息,那我們就調用相關繪制函數,傳遞比例值、總量和計數。
<p> <pre>        m_canvas-&gt;update();
</pre>
<p> 最終我們使用update()更新畫布來使所有的變化可視。
<p> <h3> drawHorizontalBarChart()
</h3>
<a name="1-1"></a><p> 我們來回顧一下剛才的這個繪制函數,看到了畫布條目如何被生成并放置到畫布上,因為這個教程是關于Qt的,而不是關于繪制圖表的好的(或者壞的)算法。
<p> <pre>    void ChartForm::drawHorizontalBarChart(
            const double scales[], double total, int count )
    {
</pre>
<p> 畫水平條形圖我們需要一個比例值的數組、總量(這樣我們就可以在需要的時候計算并且畫出百分比)和這一組值的計數。
<p> <pre>        double width = m_canvas-&gt;width();
        double height = m_canvas-&gt;height();
        int proheight = int(height / count);
        int y = 0;
</pre>
<p> 我們重新得到畫布的寬度和高度并且計算比例高度(<tt>proheight</tt>)。我們把初始的<tt>y</tt>位置設為0。
<p> <pre>        <a href="qpen.html">QPen</a> pen;
    <a name="x2425"></a>    pen.<a href="qpen.html#setStyle">setStyle</a>( NoPen );
</pre>
<p> 我們創建一個用來繪制每一個條形(矩形)的畫筆,我們把它設置為<tt>NoPen</tt>,這樣就不會畫出邊框。
<p> <pre>        for ( int i = 0; i &lt; MAX_ELEMENTS; ++i ) {
            if ( m_elements[i].isValid() ) {
                int extent = int(scales[i]);
</pre>
<p> 我們在元素矢量中迭代每一個元素,忽略無效的元素。每個條的寬度(它的長度)很簡單地就是它的比例值。
<p> <pre>                <a href="qcanvasrectangle.html">QCanvasRectangle</a> *rect = new <a href="qcanvasrectangle.html">QCanvasRectangle</a>(
                                                0, y, extent, proheight, m_canvas );
    <a name="x2422"></a>            rect-&gt;<a href="qcanvaspolygonalitem.html#setBrush">setBrush</a>( QBrush( m_elements[i].valueColor(),
                                        BrushStyle(m_elements[i].valuePattern()) ) );
    <a name="x2423"></a>            rect-&gt;<a href="qcanvaspolygonalitem.html#setPen">setPen</a>( pen );
    <a name="x2420"></a>            rect-&gt;<a href="qcanvasitem.html#setZ">setZ</a>( 0 );
    <a name="x2421"></a>            rect-&gt;<a href="qcanvasitem.html#show">show</a>();
</pre>
<p> 我們為每個條形創建一個新的<a href="qcanvasrectangle.html">QCanvasRectangle</a>,它的x位置為0(因為這是一個水平條形圖,每個條形都從左邊開始),y值從0開始,隨著每一個要畫的條形的高度增長,一直到我們要畫的條形和畫布的高度。然后我們設置條形的畫刷為用戶為元素指定的顏色和樣式,設置畫筆為我們先前生成的畫筆(比如,設置為<tt>NoPen</tt>)并且我們把條形的Z軸順序設置為0。最后我們調用show()在畫布上繪制條形。
<p> <pre>                <a href="qstring.html">QString</a> label = m_elements[i].label();
    <a name="x2426"></a>            if ( !label.<a href="qstring.html#isEmpty">isEmpty</a>() || m_addValues != NO ) {
                    double proX = m_elements[i].proX( HORIZONTAL_BAR );
                    double proY = m_elements[i].proY( HORIZONTAL_BAR );
                    if ( proX &lt; 0 || proY &lt; 0 ) {
                        proX = 0;
                        proY = y / height;
                    }
</pre>
<p> 如果用戶已經為元素指定了標簽或者要求把值(或者百分比)顯示出來,我們也要畫一個畫布文本條目。我們創建我們自己的CanvasText類(請看后面),因為我們想存儲每一個畫布文本條目中對應元素的索引(在元素矢量中)。我們從元素中得出x和y的比例值。如果其中之一&lt; 0,那么他們還沒有被用戶定位,所以你必須計算它們的位置。我們標簽的x值為0(左)并且y值為條形圖的頂部(這樣標簽的左上角就會在x,y位置)。
<p> <pre>                    label = valueLabel( label, m_elements[i].value(), total );
</pre>
<p> 然后我們調用一個助手函數valueLabel(),它可以返回一個包含標簽文本的字符串。(如果用戶已經設置相應的選項,valueLabel()函數添加值或者百分比到這個文本的標簽。)
<p> <pre>                    CanvasText *text = new CanvasText( i, label, m_font, m_canvas );
    <a name="x2424"></a>                text-&gt;<a href="qcanvastext.html#setColor">setColor</a>( m_elements[i].labelColor() );
    <a name="x2418"></a>                text-&gt;<a href="qcanvasitem.html#setX">setX</a>( proX * width );
    <a name="x2419"></a>                text-&gt;<a href="qcanvasitem.html#setY">setY</a>( proY * height );
                    text-&gt;<a href="qcanvasitem.html#setZ">setZ</a>( 1 );
                    text-&gt;<a href="qcanvasitem.html#show">show</a>();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美电影一区| 精品国产乱码久久久久久蜜臀| 久久99精品国产麻豆不卡| 亚洲成av人片在线观看| 香港成人在线视频| 亚洲风情在线资源站| 亚洲国产aⅴ成人精品无吗| 亚洲一区二区三区精品在线| 亚洲一区二区不卡免费| 亚洲va在线va天堂| 精品亚洲成a人| 成人一区二区三区视频在线观看| 成人黄动漫网站免费app| 99国产精品视频免费观看| 欧洲精品一区二区三区在线观看| 欧美亚洲一区二区在线观看| 67194成人在线观看| 精品国产免费一区二区三区香蕉| 337p粉嫩大胆色噜噜噜噜亚洲| 久久久国产精品不卡| 国产精品成人免费在线| 亚洲国产视频a| 国内精品免费**视频| 99re这里只有精品首页| 欧美绝品在线观看成人午夜影视| 精品国精品自拍自在线| 中文字幕av在线一区二区三区| 亚洲美女屁股眼交3| 日韩高清不卡一区二区三区| 国产激情视频一区二区三区欧美| 色综合视频在线观看| 精品久久久久香蕉网| 一区二区三区欧美亚洲| 蜜桃免费网站一区二区三区| aaa亚洲精品| 日韩精品一区在线| 亚洲激情一二三区| 国产成人免费高清| 欧美日韩三级视频| 日韩一区有码在线| 韩国欧美国产1区| 欧美在线一二三| 国产精品美女一区二区| 免费亚洲电影在线| 欧美综合视频在线观看| 日本一区二区三区在线观看| 日韩av一级片| 欧美三级电影在线观看| 中文字幕av不卡| 久久精品国产一区二区三| 色综合中文综合网| 国产福利91精品一区| 678五月天丁香亚洲综合网| 中文字幕一区二区不卡| 国产精品18久久久久久久久 | 日韩在线一二三区| 99在线精品视频| 欧美va亚洲va香蕉在线| 日本不卡123| 正在播放一区二区| 亚洲va国产天堂va久久en| 91麻豆国产自产在线观看| 国产偷国产偷亚洲高清人白洁| 免费观看日韩电影| 欧美人与禽zozo性伦| 亚洲综合成人在线| 色国产精品一区在线观看| 国产精品色一区二区三区| 国产麻豆视频精品| 精品国产区一区| 国产一区二区三区不卡在线观看 | 亚洲精品国产一区二区精华液 | 天天色 色综合| 欧美主播一区二区三区| 亚洲一区二区影院| 在线播放国产精品二区一二区四区| 亚洲精品高清在线观看| 欧美色图第一页| 亚洲成年人影院| 91精品国产欧美一区二区18| 视频精品一区二区| 日韩一区二区电影网| 国产乱码精品一品二品| 国产午夜精品一区二区 | 亚洲观看高清完整版在线观看 | 成人va在线观看| 中文字幕一区在线| 一本久久综合亚洲鲁鲁五月天| 亚洲三级在线免费观看| 欧美系列在线观看| 久久国内精品自在自线400部| 久久美女艺术照精彩视频福利播放| 九九精品一区二区| 国产三级久久久| 色八戒一区二区三区| 亚洲电影中文字幕在线观看| 日韩一级视频免费观看在线| 国产美女视频91| 亚洲欧美日韩一区二区| 7777精品伊人久久久大香线蕉的| 狂野欧美性猛交blacked| 日本一区二区成人| 欧美年轻男男videosbes| 国内精品免费**视频| 最新不卡av在线| 91精品国产免费| 成人网男人的天堂| 亚洲一区二区三区四区的| 欧美不卡一区二区三区| 一本到不卡精品视频在线观看| 日本不卡视频在线观看| 国产精品国产三级国产aⅴ入口 | 性久久久久久久久久久久| 精品国一区二区三区| 色香蕉成人二区免费| 日本成人超碰在线观看| 亚洲视频一区二区在线观看| 91精品一区二区三区久久久久久| 国产精品一区二区男女羞羞无遮挡| 亚洲精品日产精品乱码不卡| 日韩免费成人网| 欧美视频一二三区| 成人一区二区三区视频 | 成人av免费网站| 美女精品自拍一二三四| 亚洲综合精品久久| 国产网站一区二区| 日韩欧美亚洲另类制服综合在线| 一本久久a久久免费精品不卡| 黄页网站大全一区二区| 日韩高清不卡一区二区| 亚洲美女偷拍久久| 国产精品久久一卡二卡| 久久九九久精品国产免费直播| 91精品国产综合久久精品app | 亚洲精选免费视频| 国产午夜精品理论片a级大结局| 91精品国产入口在线| 欧美日韩免费观看一区二区三区| www.激情成人| 懂色av一区二区在线播放| 韩国v欧美v亚洲v日本v| 精品一区二区三区不卡| 午夜不卡av在线| 亚洲va欧美va天堂v国产综合| 一区二区三区高清在线| 国产精品美女www爽爽爽| 日本一区二区免费在线观看视频| 久久色成人在线| 亚洲精品一线二线三线| 久久女同精品一区二区| 久久综合久久综合久久| 久久综合精品国产一区二区三区| 精品国产免费视频| 久久久久久久久蜜桃| 亚洲国产经典视频| 亚洲视频网在线直播| 亚洲日穴在线视频| 一区二区在线免费观看| 亚洲国产日韩a在线播放| 亚洲国产精品久久人人爱| 天堂va蜜桃一区二区三区| 天堂在线亚洲视频| 蜜臀av一级做a爰片久久| 久久99精品国产麻豆婷婷 | 一区二区三区欧美在线观看| 亚洲在线成人精品| 日本欧美一区二区三区乱码| 久久精品国产澳门| 国产成人午夜精品影院观看视频| 国产福利一区二区三区| 91视频免费看| 777色狠狠一区二区三区| 精品国产免费人成电影在线观看四季 | 亚洲色图丝袜美腿| 五月天激情小说综合| 九九热在线视频观看这里只有精品| 国产成人在线色| 日本精品一区二区三区高清| 欧美久久久久免费| 久久久久久毛片| 一区二区在线观看免费 | 欧美国产精品久久| 亚洲不卡av一区二区三区| 韩国女主播一区二区三区| 91美女片黄在线| 久久影院午夜论| 亚洲欧洲中文日韩久久av乱码| 爽爽淫人综合网网站| 丰满岳乱妇一区二区三区| 欧美少妇bbb| 国产精品久久久久久妇女6080| 日本视频在线一区| 91亚洲国产成人精品一区二区三| 欧美一级久久久| 亚洲男同性恋视频| 国精产品一区一区三区mba视频 | 国产欧美一区视频| 奇米亚洲午夜久久精品| 一本大道av伊人久久综合|