• <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>
            Cpper
            C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語(yǔ)言 程序猿

            這個(gè)其實(shí)是一個(gè)線(xiàn)程安全的int mapper

            void alThunkInit(void);
            void alThunkExit(void);
            ALuint alThunkAddEntry(ALvoid 
            * ptr);
            void alThunkRemoveEntry(ALuint index);
            ALvoid 
            *alThunkLookupEntry(ALuint index);


            typedef 
            struct {
                ALvoid 
            *ptr;
                ALboolean InUse;
            } ThunkEntry;

            static ThunkEntry *g_ThunkArray;
            static ALuint      g_ThunkArraySize;

            static CRITICAL_SECTION g_ThunkLock;

            void alThunkInit(void)
            {
                InitializeCriticalSection(
            &g_ThunkLock);
                g_ThunkArraySize 
            = 1;
                g_ThunkArray 
            = calloc(1, g_ThunkArraySize * sizeof(ThunkEntry));
            }

            void alThunkExit(void)
            {
                free(g_ThunkArray);
                g_ThunkArray 
            = NULL;
                g_ThunkArraySize 
            = 0;
                DeleteCriticalSection(
            &g_ThunkLock);
            }

            ALuint alThunkAddEntry(ALvoid 
            *ptr)
            {
                ALuint index;

                EnterCriticalSection(
            &g_ThunkLock);

                
            for(index = 0;index < g_ThunkArraySize;index++)
                {
                    
            if(g_ThunkArray[index].InUse == AL_FALSE)
                        
            break;
                }

                
            if(index == g_ThunkArraySize)
                {
                    ThunkEntry 
            *NewList;

                    NewList 
            = realloc(g_ThunkArray, g_ThunkArraySize*2 * sizeof(ThunkEntry));
                    
            if(!NewList)
                    {
                        LeaveCriticalSection(
            &g_ThunkLock);
                        
            return 0;
                    }
                    memset(
            &NewList[g_ThunkArraySize], 0, g_ThunkArraySize*sizeof(ThunkEntry));
                    g_ThunkArraySize 
            *= 2;
                    g_ThunkArray 
            = NewList;
                }

                g_ThunkArray[index].ptr 
            = ptr;
                g_ThunkArray[index].InUse 
            = AL_TRUE;

                LeaveCriticalSection(
            &g_ThunkLock);

                
            return index+1;
            }

            void alThunkRemoveEntry(ALuint index)
            {
                EnterCriticalSection(
            &g_ThunkLock);

                
            if(index > 0 && index <= g_ThunkArraySize)
                    g_ThunkArray[index
            -1].InUse = AL_FALSE;

                LeaveCriticalSection(
            &g_ThunkLock);
            }

            ALvoid 
            *alThunkLookupEntry(ALuint index)
            {
                ALvoid 
            *ptr = NULL;

                EnterCriticalSection(
            &g_ThunkLock);

                
            if(index > 0 && index <= g_ThunkArraySize)
                    ptr 
            = g_ThunkArray[index-1].ptr;

                LeaveCriticalSection(
            &g_ThunkLock);

                
            return ptr;
            }
            用途比較廣
            posted @ 2015-06-29 13:24 ccsdu2009 閱讀(317) | 評(píng)論 (0)編輯 收藏
             
            class Widget : public QWidget
            {
                Q_OBJECT
            public:
                
            explicit Widget(QWidget *parent = 0);
                
            ~Widget();
            private:
                
            void resizeEvent(QResizeEvent* event);
            private:
                QStateMachine
            * mMachine;
                QSignalTransition
            * mTransition;
                QState
            * mMaxState;
                QState
            * mMinState;
                QPushButton
            * mButton;
                
            bool mResized;
            };

            Widget::Widget(QWidget *parent):
            QWidget(parent)
            {
                mResized 
            = false;
                resize(
            640,480);
            }

            Widget::
            ~Widget()
            {
            }

            void Widget::resizeEvent(QResizeEvent* event)
            {
                
            if(size().height() == 0)
                {
                    close();
                    
            return;
                }
                
            if(mResized)
                    
            return;

                mButton 
            = new QPushButton(this);
                mButton
            ->setText("Click");

                mResized 
            = true;
                QPoint p 
            = pos();
                QSize s 
            = size();

                mMachine 
            = new QStateMachine(this);
                mMaxState 
            = new QState(mMachine);
                mMaxState
            ->assignProperty(this,"geometry",QRect(p,s));
                
            //connect(mMachine,SIGNAL(finished()),this,SLOT(callClose()));
                
                mMinState 
            = new QState(mMachine);
                mMinState
            ->assignProperty(this,"geometry",QRect(p.x(),p.y()+s.height()/2,s.width(),0));
                
            //connect(mMinState,SIGNAL(entered()),this,SLOT(callClose()));
                mMachine->setInitialState(mMaxState);

                QPropertyAnimation
            * ani1 = new QPropertyAnimation(this,"geometry");
                ani1
            ->setDuration(300);
                ani1
            ->setEasingCurve(QEasingCurve::Linear);

                QSignalTransition
            * transition = mMaxState->addTransition(mButton,SIGNAL(clicked()),mMinState);
                transition
            ->addAnimation(ani1);

                mMachine
            ->start();
            }


            不過(guò)有2個(gè)問(wèn)題,當(dāng)動(dòng)畫(huà)結(jié)束的時(shí)候,和這句相關(guān)
            connect(mMinState,SIGNAL(entered()),this,SLOT(callClose()));
            可以退出程序
            但是動(dòng)畫(huà)沒(méi)執(zhí)行 有空看下
            setSizeConstraint(QLayout::SetNoConstraint);
            posted @ 2015-01-02 21:23 ccsdu2009 閱讀(3404) | 評(píng)論 (0)編輯 收藏
             
                QSignalMapper* mapper = new QSignalMapper(this);
                for(int i=0;i<4;i++)
                {
                    QRadioButton
            * button = new QRadioButton();
                    
            if(i == 0)
                        button
            ->setChecked(true);
                    button
            ->setText(items[i+1]);
                    buttonlayout
            ->addWidget(button);
                    
                    mapper
            ->setMapping(button,i);
                    connect(button,SIGNAL(clicked()),mapper,SLOT(map()));
                }

                connect(mapper,SIGNAL(mapped(
            int)),this,SLOT(onClick(int)));
            posted @ 2014-12-14 18:47 ccsdu2009 閱讀(4417) | 評(píng)論 (0)編輯 收藏
             
                QFont font;
                font.setPointSize(
            18);
                painter.setFont(font);
                QFontMetrics fm 
            = painter.fontMetrics();

                QString list[] 
            = {"A","B","C","D","E"};
                
            for(int i=0;i<5;i++)
                {
                    
            int width = fm.width(list[i]);
                    
            int height = fm.ascent()+fm.descent();
                    
                    QPair
            <int,int> pos(mDatas[i]);
                    QRectF rect(pos.first
            -width/2,pos.second-height/2,width,height);
                    painter.drawText(rect,list[i]);
                }
            posted @ 2014-12-14 11:44 ccsdu2009 閱讀(7911) | 評(píng)論 (1)編輯 收藏
             
            class painter : public QWidget
            {
                Q_OBJECT
            public:
                painter(QWidget 
            *parent = 0, Qt::WFlags flags = 0);
                
            ~painter();
            private:
                
            void paintEvent(QPaintEvent* e);
                
            void clcPos(int x,int y,int r);
                
            void renderCircle(QPainter& painter,int x,int y,int r);
                
            void renderLine(int p1,int p2);
                
            void mousePressEvent(QMouseEvent*);
                
            void mouseReleaseEvent(QMouseEvent*);
                
            int  length(int x1,int y1,int x2,int y2);
                
            int  min(int x,int y,int& m);
            private:
                
            bool mMousePress;
                QVector
            <QPair<int,int> > mPosList;
            };

            #endif

            painter::painter(QWidget* parent,Qt::WFlags flags):
            QWidget(parent,flags)
            {
                setGeometry(100,100,640,480);
                setBackgroundRole(QPalette::Base);
                setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
                mMousePress = false;
            }

            painter::~painter()
            {
            }

            void painter::paintEvent(QPaintEvent* e)
            {
                mPosList.clear();

                int w = width();
                int h = height();

                float p = 3.14159265f;

                QPainter painter(this);
                painter.setRenderHint(QPainter::Antialiasing,true);

                for(int i=0;i<5;i++)
                {
                    float delta = p*0.4*i - .5*p;
                    
                    float cos = cosf(delta)*148;
                    float sin = sinf(delta)*148;
                    int x = w/2 + cos;
                    int y = h/2 + sin;
                    mPosList.push_back(QPair<int,int>(x,y));
                }

                renderLine(0,2);
                renderLine(1,3);
                renderLine(2,4);
                renderLine(3,0);
                renderLine(4,1);

                for(int i=0;i<5;i++)
                {
                    QPair<int,int> pos = mPosList[i];
                    renderCircle(painter,pos.first,pos.second,48);
                }
            }

            void painter::clcPos(int x,int y,int r)
            {
                mPosList.push_back(QPair<int,int>(x,y));
            }

            void painter::renderCircle(QPainter& painter0,int x,int y,int r)
            {
                QPainter painter(this);
                painter.setRenderHint(QPainter::Antialiasing,true);

                painter.setPen(QPen(Qt::blue,2,Qt::SolidLine));  
                painter.setBrush(QBrush(Qt::green,Qt::SolidPattern));
                painter.drawRoundRect(x-r/2,y-r/2,r,r,99,99);
            }

            void painter::mousePressEvent(QMouseEvent* e)
            {
                if(e->button() == Qt::LeftButton)
                {
                    mMousePress = true;
                    int x = e->x();
                    int y = e->y();
                    const int off2 = 48*48;
                    
                    int m = 9999;
                    int offset = min(x,y,m);
                    if(m < 36*36)
                        std::cout<<"here:"<<offset<<std::endl;
                }
            }

            int painter::min(int x,int y,int& m)
            {
                int offset = 0;
                for(int i=0;i<5;i++)
                {
                    QPair<int,int> pos(mPosList[i]);
                    int len = length(x,y,pos.first,pos.second);
                    if(len < m)
                    {
                        m = len;
                        offset = i;
                    }
                }
                return offset;
            }

            void painter::mouseReleaseEvent(QMouseEvent* e)
            {
                mMousePress = false;
            }

            int painter::length(int x1,int y1,int x2,int y2)
            {
                return (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
            }

            void painter::renderLine(int p1,int p2)
            {
                QPair<int,int> pos1 = mPosList[p1];
                QPair<int,int> pos2 = mPosList[p2];

                float k = pos2.second - pos1.second;
                k /= (float)(pos2.first - pos1.first);
                std::cout<<k<<std::endl;

                QPainter painter(this);
                painter.setRenderHint(QPainter::Antialiasing,true);
                painter.setPen(QPen(Qt::blue,2,Qt::DotLine));
                painter.drawLine(pos1.first,pos1.second,pos2.first,pos2.second);
            }

            posted @ 2014-12-11 22:07 ccsdu2009 閱讀(2077) | 評(píng)論 (0)編輯 收藏
             
            class scrollTest : public QWidget
            {
                Q_OBJECT
            public:
                scrollTest(QWidget 
            *parent = 0, Qt::WFlags flags = 0);
                
            ~scrollTest();
            private:
                
            void createWidget();
                QWidget
            * createGroupBox(const QString& title,int n);
            };

            scrollTest::scrollTest(QWidget
            * parent,Qt::WFlags flags):
            QWidget(parent,flags)
            {
                createWidget();
            }

            scrollTest::
            ~scrollTest()
            {
            }

            void scrollTest::createWidget()
            {
                resize(
            300,360);

                QGridLayout
            * gridLayout = new QGridLayout(this);
                QScrollArea
            * scrollArea = new QScrollArea(this);
                
            //scrollArea->setWidgetResizable(false);
                
            //scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
                
                QWidget
            * scrollAreaWidgetContents = new QWidget();
                
            //scrollAreaWidgetContents->setGeometry(QRect(0, 0, 380, 251));
                scrollArea->setWidget(scrollAreaWidgetContents);

                gridLayout
            ->addWidget(scrollArea, 0012);

                QSpacerItem
            * horizontalSpacer = new QSpacerItem(298,20,QSizePolicy::Expanding,QSizePolicy::Minimum);
                gridLayout
            ->addItem(horizontalSpacer, 1011);

                QPushButton
            * pushButton = new QPushButton(this);
                pushButton
            ->setText("OK");
                gridLayout
            ->addWidget(pushButton, 1111);

                QWidget
            * content = new QWidget();
                content
            ->setMinimumHeight(280);
                
            //content->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
                
                QVBoxLayout
            * vlayout = new QVBoxLayout(content);
                
            //scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
                vlayout->addWidget(createGroupBox("box1",3));
                vlayout
            ->addWidget(createGroupBox("box2",5));
                vlayout
            ->addStretch(1);

                scrollArea
            ->setWidget(content);
                
            //scrollArea->setFixedHeight(420);
            }

            QWidget
            * scrollTest::createGroupBox(const QString& title,int n)
            {
                QGroupBox
            * box = new QGroupBox(title);
                QVBoxLayout
            * boxlayout = new QVBoxLayout(box);
                
            for(int i=0;i<n;i++)
                    boxlayout
            ->addWidget(new QRadioButton(QString("%1").arg(i)));

                
            return box;
            }
            posted @ 2014-12-04 13:54 ccsdu2009 閱讀(10969) | 評(píng)論 (1)編輯 收藏
             
            網(wǎng)上看到的例子都有點(diǎn)問(wèn)題
            上一個(gè)我測(cè)試過(guò)的例子:
            #include <qtest.h>
            #include 
            <QObject>

            class shopTest : public QObject
            {
                Q_OBJECT
            private slots:
                
            void test();
            private:
                
            void test_discount();
                
            void test_item();
                
            void te函數(shù)st_coupon();
                
            void test_date();
            };
            經(jīng)過(guò)測(cè)試 slots簇只有第一個(gè)函數(shù)會(huì)被執(zhí)行到。
            void shopTest::test()
            {
            }

            void shopTest::test_discount()
            {
            }

            void shopTest::test_item()
            {
            }

            void shopTest::test_coupon()
            {
               ..
            }


            void shopTest::test_date()
            {
              ..
            }

            QTEST_MAIN(shopTest)
            posted @ 2014-11-20 20:53 ccsdu2009 閱讀(1995) | 評(píng)論 (0)編輯 收藏
             
            解決方案:如果從文本載入的話(huà),確定文本為utf8編碼,然后調(diào)用
            QString text = QString::fromUtf8(file.readAll());即可
            posted @ 2014-11-09 19:10 ccsdu2009 閱讀(2021) | 評(píng)論 (0)編輯 收藏
             
            一直想做個(gè)類(lèi)似matlab的軟件,支持矩陣運(yùn)算,線(xiàn)代,微積分求解等功能
            大家有啥好的建議沒(méi)?

            去年業(yè)余主要開(kāi)發(fā)了GAudio
            今年開(kāi)發(fā)了華佗中藥大師業(yè)余版本,馬上就要出入門(mén)版本咯

            一直想靠寫(xiě)軟件發(fā)財(cái)
            posted @ 2014-06-09 21:13 ccsdu2009 閱讀(2104) | 評(píng)論 (2)編輯 收藏
             
            基本用法如下:
                foreach(agentiaItem* item,mTree)
                {
                    QTreeWidgetItem
            * parent = new QTreeWidgetItem(QStringList(item->getItemName()));  
                    tree
            ->addTopLevelItem(parent); 

                    QStringList list 
            = item->getItemList();
                    
            foreach(QString item,list)
                    {
                        QTreeWidgetItem
            * child = new QTreeWidgetItem(QStringList(item));  
                        parent
            ->addChild(child);  
                    }
                }
            不過(guò)構(gòu)造QTreeWidgetItem的時(shí)候,不太理解為什么要使用QStringList而不是QString?
            posted @ 2014-04-20 17:22 ccsdu2009 閱讀(1091) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題
            共38頁(yè): First 7 8 9 10 11 12 13 14 15 Last 
             
            国产午夜免费高清久久影院| 久久频这里精品99香蕉久| 亚洲精品乱码久久久久久自慰 | 伊人久久综合精品无码AV专区| 久久乐国产综合亚洲精品| 久久精品www人人爽人人| 99热成人精品免费久久| 久久久久综合中文字幕| 亚洲中文字幕无码久久2020| 久久精品免费观看| 一级女性全黄久久生活片免费| 久久精品亚洲日本波多野结衣 | 777午夜精品久久av蜜臀| 94久久国产乱子伦精品免费| 久久天天躁狠狠躁夜夜不卡| 91精品国产91久久久久久| 精品久久久久久久国产潘金莲| 国产精品久久久久无码av| 久久久亚洲欧洲日产国码是AV| 成人精品一区二区久久| 精品久久久久久久无码 | 国产午夜福利精品久久2021| 一本久久免费视频| 91麻精品国产91久久久久| 久久ww精品w免费人成| 国内精品伊人久久久影院| 久久精品视频91| 久久黄视频| 国内精品久久久久久不卡影院| 国产一级做a爰片久久毛片| 欧美亚洲色综久久精品国产| 久久人人爽人人爽人人av东京热 | 99热成人精品免费久久| 久久96国产精品久久久| 久久精品亚洲精品国产色婷| 久久久亚洲欧洲日产国码二区| av色综合久久天堂av色综合在| 亚洲欧洲中文日韩久久AV乱码| 色综合久久天天综线观看| 亚洲精品乱码久久久久久蜜桃| 模特私拍国产精品久久|