1. linux下安裝fftw函數庫後在QtCreator中如何使用
g++ main* /usr/local/fftw3/libfftw3f.so.3 -lfftw3
2. Linux中qtcreator root下無法輸入中文
打開
qtcreator.sh
這個腳本吧,環境都自動配置好的,一般都能打開,不行再看。
3. linux 怎樣安裝 qtcreator開發的程序
安裝
下載後得到大小 47.2 Mb 的安裝文件 qt-creator-linux-x86_64-opensource-1.3.0.bin,在 Linux 上安裝如下:
chmod u+x ./qt-creator-linux-x86_64-opensource-1.3.0.bin
./qt-creator-linux-x86_64-opensource-1.3.0.bin
這時候,啟動了 Setup Qt Creator 歡迎安裝對話框,點擊「Next」->
協議許可界面,選擇「I accept the agreement」,點擊「Next」 ->
選擇 Qt Creator 安裝目錄對話框。作者選擇的是 /home/defonds/TOOLS/qtcreator/qtcreator-1.3.0,點擊「Next」 ->
准備安裝界面,點擊「Next」 ->
安裝結束,點擊「Finish」。
Qt Creator 使用
新建項目 HelloWorld
啟動桌面上的 Qt Creator。新建工程 HelloWorld,菜單點擊「File」 -> New File or Project... -> Projects 中選擇 Empty Qt4 Project -> OK -> 項目名鍵入 HelloWorld,工作台隨意,作者選擇的是 /home/defonds/cpp/qt , Next -> Finish。
4. 我在Linux下安裝QT怎麼沒有運行按鈕
qt默認被安裝在/opt目錄下。你進去了找到qtcreator運行就行了。
如何添加快捷圖標:
命令行下:
ln -s qtcreator所在路徑 創建快捷方式的路徑
把qtcreator添加到環境變數的方法:
命令行下:
修改環境變數:export PATH=你qtcreator所在的目錄名:$PATH
這樣你在任何地方只要輸入qtcreator就能啟動了。
把qtcreator添加到制定的菜單分類中的方法:
我不知道小紅帽是不是還在好用gnome的桌面。
假如是的話,你可以在/usr/share/desktops/下參考一個.desktop文件添加一個自定的文件。
把qtcreator的啟動路徑和圖標路徑填進去,保存就能在對應的菜單分類中找到了。
5. 如何在linux中用QTcreator 調用本地攝像頭
/* 打開設備並進行錯誤檢查 */
int fd = open ("/dev/video",O_RDONLY);
if (fd==-1){
perror ("Can't open device");
return -1;
}
/* 查詢設備的輸出格式 */
struct v4l2_format format;
memset (&format,0,sizoef(format));
format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1==ioctl(fd,VIDIOC_G_FMT,&format)){
perror ("While getting format");
return -2;
}
/*
* 這里要將struct v4l2_format結構體置零,然後將
* format.type設定為V4L2_BUF_TYPE_VIDEO_CAPTURE,
* 這樣在進行 VIDIOC_G_FMT 的ioctl時,驅動就會知
* 道是在捕獲視頻的情形下獲取格式的內容。
* 成功返回後,format就含有捕獲視頻的尺寸大小及格
* 式。格式存儲在 format.fmt.pix.pixelformat這個32
* 位的無符號整數中,共四個位元組,以小頭序存儲。這里
* 介紹一種獲取的方法。
*/
char code[5];
unsigned int i;
for (i=0;i<4;i++) {
code[i] = (format.fmt.pix.pixelformat & (0xff<<i*8))>>i*8;
}
code[4]=0;
/* 現在的code是一個以\0結束的字元串。很多攝像頭都是以格式MJPG輸出視頻的。
* MJPG是Motion JPEG的縮寫,其實就是一些沒填霍夫曼表的JPEG圖片。
*/
/* 請求一定數量的緩沖區。
* 但是不一定能請求到那麼多。據體還得看返回的數量
*/
struct v4l2_requestbuffers req;
memset (&req,0,sizeof(req));
req.count = 10;
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
req.memory = V4L2_MEMORY_MMAP;
if (-1==ioctl(fd,VIDIOC_REQBUFS,&req)){
perror ("While requesting buffers");
return -3;
}
if (req.count < 5){
fprintf (stderr, "Can't get enough buffers!\n");
return -4;
}
/* 這里請求了10塊緩存區,並將其類型設為MMAP型。 */
/* 獲取緩沖區的信息
* 在操作之前,我們必須要能記錄下我們
* 申請的緩存區,並在最後使用munmap釋放它們
* 這里使用結構體
* struct buffer {
* void * start;
* ssize_t length;
* } 以及buffer數量
* static int nbuffer
* 來表示
*/
struct buffer * buffers = (struct buffer *)malloc (nbuffer*sizeof(*buffers));
if (!buffers){
perror ("Can't allocate memory for buffers!");
return -4;
}
struct v4l2_buffer buf;
for (nbuffer=0;nbuffer<req.count;++nbuffer) {
memset (&buf,0,sizeof(buf));
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = nbuffer;
if (-1==ioctl(fd,VIDIOC_QUERYBUF,&buf)){
perror ("While querying buffer");
return -5;
}
buffers[nbuffer].length = buf.length;
buffers[nbuffer].start = mmap (
NULL,
buf.length,
PROT_READ, /* 官方文檔說要加上PROT_WRITE,但加上會出錯 */
MAP_SHARED,
fd,
buf.m.offset
);
if (MAP_FAILED == buffers[nbuffer].start) {
perror ("While mapping memory");
return -6;
}
}
/*這個循環完成後,所有緩存區都保存在
*了buffers這個數組里了,完了就再將它們munmap即可。
*/
/* 打開視頻捕獲 */
enum v4l2_buf_type type;
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1==ioctl(fd,VIDIOC_STREAMON,&type)){
perror ("While opening stream");
return -7;
}
/* 與內核交換緩沖區 */
unsigned int i;
i=0;
while(1) {
memset (&buf,0,sizeof(buf));
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = i;
if (-1==ioctl(fd,VIDIOC_DQBUF,&buf)){
perror ("While getting buffer's data");
return -8;
}
/* 現在就得到了一片緩沖區的數據,發送處理 */
process_image ( buffers+buf.index,buf.index );
/* 將緩沖區交還給內核 */
if (-1==ioctl(fd,VIDIOC_QBUF,&buf)){
perror ("While returning buffer's data");
return -9;
}
i = (i+1) & nbuffer;
}
這就是所有獲取的過程了。至於圖像的處理,則是由解碼函數和Qt來處理。現在先進行一些思路的設計。設想在進行圖像的轉換時,必須提供一塊內存區域來進行,我們當然可以在轉換時使用malloc來進行動態分配,轉換完成並顯示後,再將它free。然而這樣做對內核而言是一個不小的負擔:每次為一整張圖片分配內存,最少也有上百KB,如此大的分配量和釋放量,很容易造成內存碎片加重內核的負擔。由於僅是每轉換一次才顯示一次圖像,所以這片用於轉換的內存區域可以安全地復用,不會同時由兩個線程操作之。因此在初始化時我們為每一塊內存映射緩沖區分配一塊內存區域作為轉換用。對於MJPEG到JPEG的轉換,使用相同的內存大小。代碼就不在此列出了。這片假設這個內存區域的起始指針為convertion_buffers,在process_image (struct buffer * buf, int index ) 中,有
void process_image (struct buffer *buf, int index){
struct * buffer conv_buf = convertion_buffers+index;
do_image_conversion (
buf->start, buf->length, /* 要轉換的區域 */
conv_buf->start, conv_buf->length, /* 保存轉換數據的區域 */
);
/* 現在就可以把數據取出並交給QPixmap處理
* 要在一個QWidget里作圖,必須重載paintEvent
* 函數並用QPainter作畫。然而paintEvent
* 是由事件驅動層調用的,我們不能手工,
* 所以在我們自己的的重載類里要保存一個全局
* 的QPixmap。這里設為 QPixmap * m_pixmap
*/
m_pixmap -> loadFromData (conv_buf->start,conv_buf->length);
/* 立即安排一次重繪事件 */
repaint ();
}
/* 重載的paintEvent示例 */
MyWidget::paintEvent (QPaintEvent * evt) {
QPainter painter(this);
painter.drawPixmap (QPoint(0,0),*m_pixmap);
QWidget::paintEvent(evt);
}
V4L搞定 +QT顯示攝像頭視頻 +QT顯示GIF動畫 2009-11-02 09:32 哎 兩星期前終於搞定了qt上顯示攝像頭視頻採集 現在來把最終重要的代碼總結下 QImage img; unsigned char *bit= v4l _dev.buffer; / /v41_dev.buffer為內存映射的地址 QRgb *point; int r, g, b; QPainter paint; if(img.create(MAX_WIDTH, MAX_HEIGHT,32, 0, QImage::IgnoreEndian)) { for(y=0; ysetMovie(movie); gif_lable->show();
哎 兩星期前終於搞定了qt上顯示攝像頭視頻採集, 現在來把最終重要的代碼總結下
QImage img;
unsigned char *bit= v4l _dev.buffer; / //v41_dev.buffer為內存映射的地址
QRgb *point;
int r, g, b;
QPainter paint;
if(img.create(MAX_WIDTH, MAX_HEIGHT,32, 0, QImage::IgnoreEndian))
{
for(y=0; y<MAX_HEIGHT; y++)
{
for(x=0; x<MAX_WIDTH; x++)
{
r=(int)bit[i+2];
g=(int)bit[i+1];
b=(int)bit[i];
point= (QRgb *)(img).scanLine(y)+ x;
*point = qRgb(r,g,b); //qRgb函數能夠將數據轉為RGB三像素值
i+=3;
}
}
}
但是不是很明白,希望有人能把這個直接寫成 QT GUI APPLICATION PROJECT 然後我再參考下。。。因為對於QT的類庫真的不太了解,呵呵
6. qtcreator在Linux上調用失敗,求助
不管是windows還是在Linux,出現這個問題首先考慮查看系統下是否安裝有調試器
1.如果沒有安裝,則安裝合適的調試器,然後轉步驟3;
2.如果已安裝調試器則查看QtCreator能否自動檢測到。如果未檢測到轉步驟3.
3.設置調試器:在工具->選項->構建和運行->調試器中添加調試器。重啟QtCreator即可。
ps: linux下使用 yum install gdb,安裝gdb調試工具。
7. Linux環境下如何安裝qt creator 2.4.1
這個然後安裝qt官方的完整的QtSDK。
http://qt.nokia.com/downloads/sdk-windows-cpp-offline
單獨的QtCreator什麼用都沒有。
它需要安裝編譯開發工具、安裝Qt庫本身和文檔。
你裝了qtcreator,不裝其他的,等於什麼都沒裝。
必須要一整套的東西全部裝了才能用。
所以要安裝完整QtSDK。
8. 如何使用qtcreator linux
安裝
後得到大小 47.2 Mb 的安裝文件 qt-creator-linux-x86_64-opensource-1.3.0.bin,在 Linux 上安裝如下:
chmod u+x ./qt-creator-linux-x86_64-opensource-1.3.0.bin
./qt-creator-linux-x86_64-opensource-1.3.0.bin
這時候,啟動了 Setup Qt Creator 歡迎安裝對話框,點擊「Next」->
協議許可界面,選擇「I accept the agreement」,點擊「Next」 ->
選擇 Qt Creator 安裝目錄對話框。作者選擇的是 /home/defonds/TOOLS/qtcreator/qtcreator-1.3.0,點擊「Next」 ->
准備安裝界面,點擊「Next」 ->
安裝結束,點擊「Finish」。
Qt Creator 使用
新建項目 HelloWorld
啟動桌面上的 Qt Creator。新建工程 HelloWorld,菜單點擊「File」 -> New File or Project -> Projects 中選擇 Empty Qt4 Project -> OK -> 項目名鍵入 HelloWorld,工作台隨意,作者選擇的是 /home/defonds/cpp/qt , Next -> Finish。
9. linux下qtcreator怎麼配置c++的編譯器
編譯器:GCC編譯器可以用來編譯C和C++源程序,C編譯器通過文件的後綴來判斷是C程序還是C++程序。一般來說C源文件的後綴為「.C」,而C++源文件的後綴為「.C」或「C++」。
但GCC編譯器只能編譯C++源程序,不能與使用的庫連接,因此用G++來完成C++程序的編譯與連接,該程序會自動調用GCC來編譯。