Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿

static void audio_encode(const char *filename)
{
    AVCodec *codec;
    AVCodecContext *c = NULL;
    int frame_size, i, j, out_size, outbuf_size;
    FILE *f;
    short *samples;
    float t, tincr;
    uint8_t *outbuf;

    codec = avcodec_find_encoder(CODEC_ID_MP2);
    if(!codec)
    {
        fprintf(stderr, "codec not found\n");
        exit(1);
    }

    c = avcodec_alloc_context3(codec);

    c->bit_rate = 64000;
    c->sample_rate = 44100;
    c->channels = 1;
    c->sample_fmt = AV_SAMPLE_FMT_S16;

    if(avcodec_open(c, codec) < 0)
    {
        fprintf(stderr, "could not open codec\n");
        exit(1);
    }

    frame_size = c->frame_size;
    samples = malloc(frame_size * 2 * c->channels);
    outbuf_size = 10000;
    outbuf = malloc(outbuf_size);

    f = fopen(filename, "wb");
    if(!f)
    {
        fprintf(stderr, "could not open %s\n", filename);
        exit(1);
    }

    /* encode a single tone sound */
    t = 0;
    tincr = 2 * M_PI * 440.0 / c->sample_rate;
    for(i=0;i<200;i++) {
        for(j=0;j<frame_size;j++) {
            samples[2*j] = (int)(sin(t) * 10000);
            samples[2*j+1] = samples[2*j];
            t += tincr;
        }
        /* encode the samples */
        out_size = avcodec_encode_audio(c, outbuf, outbuf_size, samples);
        fwrite(outbuf, 1, out_size, f);
    }
    fclose(f);
    free(outbuf);
    free(samples);
    avcodec_close(c);
    av_free(c);
}
posted @ 2012-01-10 21:31 ccsdu2009 阅读(2221) | 评论 (2)编辑 收藏
 
有时候,有必要当QPushButton为Hover状态的时候能发生消息,以便能执行一些动作,当时QPushButton并没有相应的信号。

我订制的QHoverButton如下:
class QHoverButton : public QPushButton
{
    Q_OBJECT
public:
    QHoverButton(QWidget
* parent = 0);
    QHoverButton(
const QString &text,QWidget* parent = 0);
    
~QHoverButton();
signals:
    
void enter();
    
void denter();
private:
    
void enterEvent(QEvent* event);
    
void leaveEvent(QEvent* event);
};

QHoverButton::QHoverButton(QWidget* parent):
QPushButton(parent)        
{
}

QHoverButton::QHoverButton(
const QString &text,QWidget* parent):
QPushButton(text,parent)
{
}

QHoverButton::
~QHoverButton()
{

}

void QHoverButton::enterEvent(QEvent* event)
{
    emit enter();
}

void QHoverButton::leaveEvent(QEvent* event)

    emit denter();
}

在这里使用QWidget虚函数enterEvent,leaveEvent来发送hover消息
posted @ 2011-12-24 11:12 ccsdu2009 阅读(771) | 评论 (0)编辑 收藏
 
具体就是实现函数contextMenuEvent(QContextMenuEvent* event)
在其中加入popMenu->addAction(action);  
为了响应action,则可以链接action的click(),trigger()函数和处理函数
另外,有事情右键菜单选项需要根据鼠标所指项显示,则可以使用
 

    QTableWidgetItem* item = itemAt(mapFromGlobal(QCursor::pos()));
    
if(item != NULL)
    {

获取当前表格项

需要说的是开始我总是使用setCellWidget设置表格单元,导致itemAt总是返回空值,而实际应该使用的是函数setItem.
感觉QTableWidget此类设计有点问题!
posted @ 2011-12-19 22:33 ccsdu2009 阅读(4435) | 评论 (0)编辑 收藏
 
QGroupBox基本如下:
class Q_GUI_EXPORT QGroupBox : public QWidget
{
public:
    
explicit QGroupBox(QWidget* parent=0);
    
explicit QGroupBox(const QString &title, QWidget* parent=0);
    
~QGroupBox();

    QString title() 
const;
    
void setTitle(const QString &title);

    Qt::Alignment alignment() 
const;
    
void setAlignment(int alignment);

    QSize minimumSizeHint() 
const;

    
bool isFlat() const;
    
void setFlat(bool flat);
    
bool isCheckable() const;
    
void setCheckable(bool checkable);
    
bool isChecked() const;
public Q_SLOTS:
    
void setChecked(bool checked);
Q_SIGNALS:
    
void clicked(bool checked = false);
    
void toggled(bool);
};

其中
setFlat控制显示外框与否
setCheckable()设置QGroupBox是否为活动状态
如果可以当前QGroupBox是活动状态,则点击QGroupBox则激发toggled
posted @ 2011-12-18 20:22 ccsdu2009 阅读(1110) | 评论 (0)编辑 收藏
 
有时候单靠使用QT的Layout无法保持,就需要调整QLayout的参数了
QLayout::SetDefaultConstraint0The main widget's minimum size is set to minimumSize(), unless the widget already has a minimum size.
QLayout::SetFixedSize3The main widget's size is set tosizeHint(); it cannot be resized at all.
QLayout::SetMinimumSize2The main widget's minimum size is set to minimumSize(); it cannot be smaller.
QLayout::SetMaximumSize4The main widget's maximum size is set to maximumSize(); it cannot be larger.
QLayout::SetMinAndMaxSize5The main widget's minimum size is set to minimumSize() and its maximum size is set to maximumSize().
QLayout::SetNoConstraint41The widget is not constrained.
QLayout默认的主控件大小就是主控件的大小
要调整布局效果可以调用setSizeConstraint函数
如果不想当布局变化的时候改变控件大小就可以设置布局为SetFixedSize
其余类似
posted @ 2011-12-17 11:19 ccsdu2009 阅读(3093) | 评论 (0)编辑 收藏
 
QTableWidget要设置项标题
关键的二个函数是
setColumnCount以及setHorizontalHeaderLabels
注意其使用程序是
首先调用
setColumnCount
然后设置表头标签链表
setorizontalHeaderLabels
如果这二个函数次序
posted @ 2011-12-11 20:48 ccsdu2009 阅读(7491) | 评论 (0)编辑 收藏
 
     摘要: QVariant是一种可以存储不同类型的数据结构,在很多场合这是很有用得为了达到这种目的,可以想象,该对象应该存储对象的类型信息,数据信息以及其他辅助详细考虑用途,这种对象必须支持对不同对象的存储,对存储类型的检测以及取对象三个功能1.对象的存储代码见下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://w...  阅读全文
posted @ 2011-12-10 20:51 ccsdu2009 阅读(4323) | 评论 (0)编辑 收藏
 
刚使用VC编译过了QT4.7,具体步骤如下:
1.下载QT源码压缩包:
http://download.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.4.zip
2.解压压缩包到D盘下
3.添加系统变量PATH=D:\qt-everywhere-opensource-src-4.7.4\bin
                   QTDIR=D:\qt-everywhere-opensource-src-4.7.4
4.cmd进入vc目录执行vcvars32.bat
5.进入QT目录执行configure
6.输入o选择开源项目
7.配置完成后执行nmake进行编译
posted @ 2011-12-10 19:37 ccsdu2009 阅读(436) | 评论 (0)编辑 收藏
 
现在Android很热,很多人都是在linux下编译Android程序的,但是知道能在Eclipse下开发Android应用的人不多。
我说下如何在Eclipse下编译Android应用
1.首先在Linux下编译好Android大版本
2.进入out/../target/common/obj/java_imminatelibraried目录,找出如下三个文件夹(core_immiaterlibraeted,framework_immiatelibraied,ext_immiatelibrary)下的classed.jar文件.
重新命名为core.jar,framwork.jar,ext.jar
然后复制到开发机器上
3.新建Android工程,移除原有的Android包,导入必要的java包,新建jar库,导入这3个jar包即可使用
本方法都大部分应用有效
posted @ 2011-12-06 21:36 ccsdu2009 阅读(1695) | 评论 (0)编辑 收藏
 
QRegex提供字符串验证,匹配,搜索,替换和切割的功能
一个比较简单的例子是
QRegExp exp("-(.*)\(");
exp.setMinimal(
true);
这儿匹配的是以-开头,以(结束的字符串
基本的QRegex
1.isValid()判断给定表达式是否合法
2.errorString()检错误和isValid()类似
3.isEmpty()判断正则表达式是否为空
4.caseSensitivity()检测大小写敏感
5.pattern()获取正则表达式本身
6.capturedTexts获取捕获的所有字符串
7.cap()获取捕获的字符串索引从1开始
8.numCaptures()返回匹配的字符串个数
9.

indexIn ( const QString & str, int offset = 0, CaretMode caretMode= CaretAtZero ) const

从字符串给定偏移匹配之
10.还有一个函数需要交代的是setMinimal(int minimal)
该函数主要作用是开启或者关闭最小匹配
举一个例子:
"We must be <b>bold</b>, very <b>bold</b>!" and the pattern <b>.*</b>.
如果设置正则表达式为<b>.*</b>
如果设置为最大匹配,则捕获到<b>bold</b>,very <b>bold</b>
如果设置为正则表达式,
则第一次匹配到第一个<b>bold</b>
第二次匹配到第二个<b>bold</b>

基本的正则表达式如下:
\r       回车
\n      换行
\t      制表
\\      \本身
\"      "
\^    ^
\$    $
\s    匹配空白符
\~   匹配字符串开始
$     匹配字符串结束
\b    单词的开始或者结束
[]    匹配其中的一个字符 比如[abc]匹配a,b或者c [^abc]匹配a,b,c之外的字符 [a-c] 匹配a到c之间的字符
{n} 匹配出现n次 比如ab{2} 相当于abb ab{1,3}相当于ab,abb,abbb
{n,}最少出现n次
?   出现0,1次 比如ab[cd]?相当于ab,abc,abd
++ 最少出现1次
*   不出现或者出现任意次,比如\^*c匹配 d,^d,^^d等




posted @ 2011-11-30 19:57 ccsdu2009 阅读(2739) | 评论 (0)编辑 收藏
仅列出标题
共38页: First 14 15 16 17 18 19 20 21 22 Last