gpt4 book ai didi

gnuplot - 无法将 gnuplot x11 窗口嵌入 Gtk3 套接字

转载 作者:行者123 更新时间:2023-12-04 17:54:55 30 4
gpt4 key购买 nike

我正在我的 Gtk3(实际上是 gtkmm)应用程序中创建 Gtk::Socket 并尝试将 gnuplot 的窗口嵌入其中。但它不起作用:套接字仍然保持为黑色矩形,而 gnuplot 窗口在其他地方独立出现。

同时,Gtk::Plug 完美地插入了这个 socket 。在 Gtk2 中,这个使用 gnuplot 的技巧也很有效。

这是socket.cpp

#include <iostream>
#include <fstream>
#include <gtkmm.h>
#include <gtkmm/socket.h>

using namespace std;

void plug_added(){
cout << "A plug was added" << endl;
}

bool plug_removed(){
cout << "A Plug was removed" << endl;
return true;
}

class MySocketWindow : public Gtk::Window
{
public:
MySocketWindow()
{
auto socket = Gtk::manage(new Gtk::Socket());
add(*socket);
socket->signal_plug_added().connect(sigc::ptr_fun(plug_added));
socket->signal_plug_removed().connect(sigc::ptr_fun(plug_removed));
cout << "Socket id is: " << hex << socket->get_id() << endl;
show_all();
}
};

int main(int argc, char** argv)
{
auto app =
Gtk::Application::create(argc, argv, "org.gtkmm.example.socket");
MySocketWindow win;
app->run(win);
return 0;
}

编译并运行:
$ g++ --std=c++0x socket.cpp -o socket `pkg-config gtkmm-3.0 --cflags --libs`
$ ./socket &
[1] 22832
$ Socket id is: 2c00007

启动 gnuplot:
gnuplot> set term x11 window "2c00007"
Terminal type set to 'x11'
Options are 'XID 0x2C00007 nopersist enhanced'
gnuplot> plot sin(x)

那么,与 Gtk2 相比,Gtk3 套接字是否存在阻止 gnuplot 连接的差异?

Ubuntu Xenial 16.04.1 x64、gnuplot-4.6.6、libgtkmm-3.0-dev 3.18.0、g++ 5.4.0 不起作用

Ubuntu Trusty 14.04.4 x86、gnuplot-4.6.4、libgtkmm-3.0-dev 3.10.1、g++ 4.8.4 作品

更新:

深入挖掘 gnuplot 源代码表明,Gnuplot 为其窗口创建了“X11 Visual”结构,这与 socket 的窗口不同。要解决此问题,请更改行:
    plot->window = XCreateWindow(dpy, plot->external_container, plot->x, plot->y, plot->width,
plot->height, 0, dep, InputOutput, vis, 0, NULL);


    plot->window = XCreateWindow(dpy, plot->external_container, plot->x, plot->y, plot->width,
plot->height, 0, dep, InputOutput, gattr.visual, 0, NULL);

(gplt_x11.c 的第 6339 行(版本 5.5.2))

最佳答案

似乎最近的更新允许通过#define 修复此问题。拉 gnuplot(5.2.5 是我所拥有的)并在本地构建,并在 config.hin 中更改以下内容构建之前的文件:
#undef EXTERNAL_X11_WINDOW#define EXTERNAL_X11_WINDOW
然后按照提供的说明进行安装,您应该已经设置好了!

关于gnuplot - 无法将 gnuplot x11 窗口嵌入 Gtk3 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209199/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com