自适应网站建站价格百度电脑版下载
- 作者: 五速梦信息网
- 时间: 2026年03月21日 05:00
当前位置: 首页 > news >正文
自适应网站建站价格,百度电脑版下载,wordpress 个人介绍,贵阳市网站做的最好的大部分服务器并没有GUI#xff0c;运行的是基础的Linux系统#xff0c;甚至是容器。如果我们需要在这些系统中运行带有GUI功能的Qt程序#xff0c;一般情况下就会报错#xff0c;比如#xff1a; \( ./collidingmice qt.qpa.xcb: could not connect to display qt.qpa.plu…大部分服务器并没有GUI运行的是基础的Linux系统甚至是容器。如果我们需要在这些系统中运行带有GUI功能的Qt程序一般情况下就会报错比如 \) ./collidingmice qt.qpa.xcb: could not connect to display qt.qpa.plugin: From 6.5.0, xcb-cursor0 or libxcb-cursor0 is needed to load the Qt xcb platform plugin. qt.qpa.plugin: Could not load the Qt platform plugin xcb in even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.Available platform plugins are: linuxfb, wayland-egl, vnc, eglfs, wayland, vkkhrdisplay, minimalegl, minimal, offscreen, textui, xcb. 如果现实情况不允许我们安装图形界面是不是就完全无法使用这些程序了呢 答案是否定的。本文介绍一些使用GUI程序的例子。
- Qt的Platform插件机制 Qt 的Platform插件是用来适配各种GUI环境的框架。从上面出错的提示我们就能看到它支持很多类的GUI比如linux的framebuf以及vnc。 为什么Qt能够支持如此多的平台呢主要原因是Qt本身把GUI完全独立于OS来完全重写我的一篇文章里详细跟踪了这种从像素开始造轮子的原理 Qt Desktop Widgets 控件绘图原理逐步分析拆解 其实就是Qt从像素级别在内存中实现了完整的GUI。因此Qt的程序运行可以完全脱离GUI。
- 探索bash下的奶酪鼠鼠 理论上我们只要有一个支持显示图案的方法以及一套读取键鼠的驱动就可以贯通Qt的GUI了。我们签出Qt6.8.1的源码在 plugins/platform里加入一个测试插件就叫textui。这个插件是从 minmal直接修改而来功能不完全仅用于测试。 这个插件实现了一个字符界面的 backingStore可以把一幅图的轮廓用彩色的字符显示出来 #ifndef QBACKINGSTORE_MINIMAL_H #define QBACKINGSTORE_MINIMAL_H#include qpa/qplatformbackingstore.h #include qpa/qplatformwindow.h #include QtGui/QImage #include QThread #include textcall.h QT_BEGIN_NAMESPACEclass QTextUIBackingStore : public QPlatformBackingStore { public:QTextUIBackingStore(QWindow *window);~QTextUIBackingStore();QPaintDevice *paintDevice() override;void flush(QWindow *window, const QRegion region, const QPoint offset) override;void resize(const QSize size, const QRegion staticContents) override;void initEvent();void exitEvent(); private:QImage mImage;QThread * m_keyThread;textInput * m_textInput;textCall * m_textCall; };QT_END_NAMESPACE#endif 绘图代码 #include qtextuibackingstore.h #include qscreen.h #include QtCore/qdebug.h #include qpa/qplatformscreen.h #include private/qguiapplication_p.h #include QKeyEvent #include ncurses.h #include textgraph_bash.hQT_BEGIN_NAMESPACE WINDOW * scr nullptr; QColor cls_standard[]{QColor(0,0,0),QColor(255,0,0),QColor(0,255,0),QColor(0,0,255),QColor(255,255,0),QColor(255,0,255),QColor(0,255,255),QColor(255,255,255)}; #define PFF(W,h,w,c) (h * (W*3) w * 3 c)using namespace Qt::StringLiterals;QTextUIBackingStore::QTextUIBackingStore(QWindow *window): QPlatformBackingStore(window) {scr initscr();start_color();init_pair(1, COLOR_RED, COLOR_BLACK);init_pair(2, COLOR_GREEN, COLOR_BLACK);init_pair(3, COLOR_BLUE, COLOR_BLACK);init_pair(4, COLOR_YELLOW, COLOR_BLACK);init_pair(5, COLOR_MAGENTA, COLOR_BLACK);init_pair(6, COLOR_CYAN, COLOR_BLACK);init_pair(7, COLOR_WHITE, COLOR_BLACK);initEvent(); }QTextUIBackingStore::~QTextUIBackingStore() {endwin();exitEvent(); }QPaintDevice *QTextUIBackingStore::paintDevice() {return mImage; } void QTextUIBackingStore::initEvent() {m_textInput new textInput;m_textCall new textCall;m_keyThread new QThread;m_textInput-moveToThread(m_keyThread);QObject::connect(m_textInput,textInput::keyPress,m_textCall,textCall::onKeyPress,Qt::QueuedConnection);m_keyThread-start(); } void QTextUIBackingStore::exitEvent() {m_keyThread-terminate();m_textInput-deleteLater();m_textCall-deleteLater();QObject::disconnect(m_textInput,textInput::keyPress,m_textCall,textCall::onKeyPress);} void QTextUIBackingStore::flush(QWindow *window, const QRegion region, const QPoint offset) {Q_UNUSED(window);Q_UNUSED(region);Q_UNUSED(offset);unsigned short int tw,th;if (!get_bash_size(tw,th))return;const int img_width mImage.width();const int img_height mImage.height();const double sw img_width *1.0 / tw;const double sh img_height*1.0 / th;const int dw sw/2;const int dh sh/2;const int ds (dw * 2 1) * (dh * 2 1);const char pAMP[] .,:;-??{]XCUOP#%B;const int lev sizeof(pAMP)-1;for (int h 0;h th;h){for (int w 0;wtw;w){const double c_y h * sh ;const double c_x w * sw;float r0,g0,b0, p 0;for (int iy -dh;iydh;iy){int y qRound( c_y iy);if (y0) y 0;if (yimg_height) y img_height - 1;QRgb line reinterpret_castQRgb(mImage.scanLine(y));for (int ix 0; ix dw; ix) {int x qRound(c_x ix);if (x0) x 0;if (ximg_width) x img_width-1;QRgb rgb line[x];r qRed(rgb);g qGreen(rgb);b qBlue(rgb);//p 0.2989 * r 0.5870 * g 0.1140 * b;p (r g b)/3;}}float r1 double® /ds/ 256;float g1 double(g) /ds/ 256;float b1 double(b) /ds/ 256;float mindis 1e99;int mini 7;for (int i 1;i8;i){float r2,g2,b2;cls_standard[i].getRgbF(r2,g2,b2);double dis (r1-r2)(r1-r2) (g1-g2)(g1-g2) (b1-b2)*(b1-b2);if (dis mindis){mindis dis;mini i;}}attron(COLOR_PAIR(mini));p /256;p/ds;if (p0.5)attron(A_NORMAL);elseattron(A_BOLD);p *lev;if (plev)p lev -.1;int nv p;mvprintw(h,w,%c,pAMP[nv]); // 在指定位置输出字符 A}}refresh(); // 刷新屏幕显示 }void QTextUIBackingStore::resize(const QSize size, const QRegion ) {QImage::Format format QGuiApplication::primaryScreen()-handle()-format();if (mImage.size() ! size)mImage QImage(size, format); }QT_END_NAMESPACE 上述代码直接读取 backingStore的图片并转换为近似色彩的字符图案。我们举例使用Qt Widgets的经典程序 collidingmice 来测试 $ ./collidingmice -platform textui可以看到在bash中鼠鼠可以自由地在字符奶酪里运动。 注意由于我们没有实现键鼠事件所以这个程序只能看不能玩。 3. 实操使用VNC平台 上面的例子我们利用bash下 ncurse库实现了基本的字符显示。ncurse也可以捕捉键鼠但是由于字符界面的分辨率非常糟糕要输入汉字、精确拖放都是不行的。其实Linux下Qt早就想到了我们的需求提供了VNC插件。 ./collidingmice -platform vnc:size640x640,port5902而后在一台具有GUI的机器比如windows上远程VNC到 5902端口即可看到同样的界面 4. Qt GUI 程序开发建议 既然Qt GUI程序可以支持这种平台重载那就要考虑到对应的使用方式尤其是对 minimal平台的支持。 minimal平台是一个空壳不做任何绘图和键鼠事件捕获因此可以在自己的代码中加入判断允许用–service等类似字眼的开关打开一个后台模式让GUI程序默默在后台运行功能。对VNC平台可以在代码中加入允许从命令行设置最大化的功能让GUI随着vnc的窗口设置而变。
- 上一篇: 自适应网站建设推荐wordpress xiu 5.6
- 下一篇: 自适应网站建站只做PC版网站
相关文章
-
自适应网站建设推荐wordpress xiu 5.6
自适应网站建设推荐wordpress xiu 5.6
- 技术栈
- 2026年03月21日
-
自适应企业网站源码如何在淘宝客上做自己的网站
自适应企业网站源码如何在淘宝客上做自己的网站
- 技术栈
- 2026年03月21日
-
自适应和响应式网站佛山微信网站建设
自适应和响应式网站佛山微信网站建设
- 技术栈
- 2026年03月21日
-
自适应网站建站只做PC版网站
自适应网站建站只做PC版网站
- 技术栈
- 2026年03月21日
-
自适应网站举例统计网站访客人数
自适应网站举例统计网站访客人数
- 技术栈
- 2026年03月21日
-
自适应网站举例怎么模仿网站做ppt
自适应网站举例怎么模仿网站做ppt
- 技术栈
- 2026年03月21日
