我在一个内存受限的嵌入式Linux设备上通过HTTP将大文件(1Gb)传输到Qt中的服务器.当我第一次收到标题时,我确定在文件系统上写入数据的位置,创建一个指向该位置的QFile指针,然后打开要附加的文件.每次新数据到达套接字时,都会在服务器中调用"accumulate"函数.从那个累积函数我想通过write()将数据直接传输到文件.你可以在下面看到我的累积功能.
我的问题是这样做时的内存使用 - 我的内存不足.我不应该能够刷新()和fsync()累积的每次迭代,而不必担心RAM使用?我做错了什么,我该如何解决这个问题?谢谢 -
我在累积函数之前打开一次文件:
// Open the file
filePointerToWriteTo->open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Unbuffered)
Run Code Online (Sandbox Code Playgroud)
这是累积函数的一部分:
// Extract the QFile pointer from the QVariant
QFile *filePointerToWriteTo = (QFile *)(containerForPointer->pointer).value<void *>();
qDebug() << "APPENDING bytes: " << data.length();
// Write to the file and sync
filePointerToWriteTo->write(data);
filePointerToWriteTo->waitForBytesWritten(-1);
filePointerToWriteTo->flush(); // Flush
fsync(filePointerToWriteTo->handle()); // Make sure bytes are written to disk
Run Code Online (Sandbox Code Playgroud)
编辑:
我检测了我的代码和'waitForBytesWritten(-1)'调用总是返回'false'.文档说这应该等到数据写入设备.
另外,如果我只取消注释'write(data)'行,那么我的空闲内存永远不会减少.会发生什么事?"写"如何消耗这么多内存?
编辑:
现在我正在做以下事情.我没有内存耗尽,但我的可用内存降至2Mb并在那里盘旋直到整个文件被传输.此时,内存被释放.如果我在中间杀死传输,内核似乎保持内存,因为它保持大约2Mb可用,直到我重新启动进程并尝试写入同一个文件.我仍然认为我应该能够在每次迭代时使用和刷新内存:
// Extract the QFile pointer from the QVariant
QFile *filePointerToWriteTo = (QFile *)(containerForPointer->pointer).value<void *>();
int numberOfBytesWritten = …Run Code Online (Sandbox Code Playgroud) 我工作的一个嵌入式项目,用户界面开发中QML使用后端逻辑开发DB中/其他系统调用C++/ Qt.
哪个是部署qml文件的最佳方法?
它是否添加到.qrc(作为资源)并编译到可执行应用程序?
要么
QML从导入文件夹加载文件(QML将部署文件)?
或任何其他建议?
我有大约200个QML文件.
我在ARM显示设备上使用QtEmbedded(4.8.0),帧缓冲区(/ dev/fb0)上的颜色深度为16位.在这种情况下,我们将颜色位RED和BLUE交换.
我们使用以下编译标志:
./configure -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -prefix /home/rchaves/Toolchain -release -opensource -shared -fast -depths 16 -largefile -no-exceptions -no-accessibility -stl -no-sql-mysql -no-sql-psql -no-sql-oci -no-sql-odbc -no-sql-tds -no-sql-db2 -no-sql-sqlite -no-sql-sqlite2 -no-sql-ibase -no-qt3support -no-xmlpatterns -no-multimedia -no-audio-backend -no-phonon-backend -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -no-openssl -no-nis -no-cups -iconv -no-pch -no-dbus -qt-freetype -no-opengl -qt-gfx-linuxfb -qt-kbd-linuxinput -qt-mouse-tslib -nomake demos -nomake examples
Run Code Online (Sandbox Code Playgroud)
以及执行应用程序的以下参数:
QWS_DISPLAY=LinuxFb:/dev/fb0:depth=16 ./app -qws
Run Code Online (Sandbox Code Playgroud)
这里有应用程序framebuffer(samples)日志:
The framebuffer device was opened successfully.
Fixed screen info:
id: DISP3 BG
smem_start: 0x93800000 …Run Code Online (Sandbox Code Playgroud) 我正在使用Qt Embedded开发应用程序并在linux framebuffer中运行它.我需要一种方法来输入非美国字符.是否可以用Qt更改键盘布局?
我试着在Qt/X11上运行它.布局切换和输入在那里非常好.但是当我用Qt/Embedded编译它并在framebuffer中运行它时我无法改变布局.
我搜索了文档,没有找到任何关于布局切换的信息.
我认为它与文档中指定的qt键盘驱动程序有关.看来我应该开发自己的键盘驱动程序.但我正在使用标准键盘,我认为必须有一种标准的方式来改变输入语言?
你会建议什么?
顺便说一下,我正在使用4.5版本.也许4.6有什么可以解决这个问题?
这里遇到同样的问题:
http://lists.trolltech.com/pipermail/qt-embedded-interest/2008-August/000034.html
http://lists.trolltech.com/qt-interest/2004-02/msg00570.html
我正在使用QMainWindow进行我的项目的GUI开发。我遇到的一个问题是在操作一个其他窗口时阻止所有其他可见窗口获取输入。
我无法使用QDialog。因为需要QMainWindow的丰富功能。
如何将特定窗口声明为模式窗口?
我尝试了QWidget::setWindowMOdality()。
这是一个演示程序,我尝试了但是没用。
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
int main(int argc, char **argv){
QApplication a(argc, argv);
QMainWindow *w1 = new QMainWindow();
w1->resize(500,800);
w1->move(100,50);
w1->show();
QMainWindow *w2= new QMainWindow();
w2->resize(800,500);
w2->move(50,50);
w2->show();
w2->setWindowModality(Qt::ApplicationModal);
return a.exec();
}
Run Code Online (Sandbox Code Playgroud) 窗口如何在qt嵌入中工作,Qt直接绘制到帧缓冲区而不是通过单独的窗口系统?我可以一次运行多个程序吗?我是否得到合成和小[x]按钮,最大化等等?
我是Qt.i的新手我通过QGraphicsScene类处理画布小部件.但是我无法更改小部件的默认白色背景.这是code.i已经尝试使用QBrush来设置背景.但它不起作用.it仍然是白色.以下代码中的问题是什么?
int main(int argc, char **argv){
QApplication a(argc, argv);
QGraphicsScene canvas;
canvas.addText("Hello World");
QColor *color=new QColor(0x70,0x80,0x50,255);
QBrush *brush=new QBrush();
brush->setColor(*color);
canvas.setBackgroundBrush(*brush);
QGraphicsView view(&canvas);
view.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud) 我的系统:
我正在尝试将拉丁字母与其他类型的字符(例如日语)混合使用。我有拉丁字母和日语字符的字体,但它们不是相同的字体。我研究了以下帖子:
Qt 同时使用多种字体和how-to-properly-output-multilingual-text-in-qt-embedded
我按照步骤操作,但无法正确显示所有字符
有什么办法可以表明如果不能显示字体改变了?
编码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QString chino = QString::fromUtf8("??");
QString ruso = QString::fromUtf8("???????????");
QString arabe = QString::fromUtf8("???? ????");
QString japones = QString::fromUtf8("???");
QString otros = QString::fromUtf8("?????");
QString mezcla = QString::fromUtf8("?a?s???d??????");
QString indu = QString::fromUtf8("???? ???,?????,???????");
ui->textochino->setText(chino);
ui->textoruso->setText(ruso);
ui->textoarabe->setText(arabe);
ui->textojapones->setText(japones);
ui->texto1->setText(mezcla);
ui->texto2->setText(indu);
}
MainWindow::~MainWindow()
{
delete ui;
}
Run Code Online (Sandbox Code Playgroud)