Chrome like tab with separate process for each?



  • I'm trying to create a program with tab functionality like a text editor. When I click new, a new tab will be added to the maindow but in a separate process, like Chrome. So if one tab crashed the other tabs will be unaffected.

    I have searched a lit but still don't know where to start.


  • Lifetime Qt Champion

    Hi
    well then the editor core would to be separate from
    the GUI and communicated with mainwindow via network/pipes/IPC
    to carry out editing functions. Or something like that.
    So if the editor process crashes then rest still works.
    But seems very overkill for text editor.



  • @mrjj

    Hi, each tab will have more functions/calls attach to it, not only a text editor.

    So is it that first I need to make a class for each of the functions I need like text editor, then make a tab class that calls all these classes. And then in the mainwindow, create a new instances of this tab class every time I want to make a new one? But isn't this still one single process overall?


  • Lifetime Qt Champion

    @lansing
    You would not create instance but run a new process being a editor tab.
    But im not sure how it would be possible to have all GUI in separate process and then
    show is as one application.
    What Chrome does is to run the rendering engine in own processes and only draw the result to the tabs
    and sends interactions to the engine.



  • @mrjj

    I don't quite understand. So Chrome has a central rendering engine that was connecting to a tab GUI? And on a new tab request the engine creates a separate process, and each process and the tab gui interact with one another through the engine?


  • Qt Champions 2018

    @lansing If you want to do it like this you first should learn about IPC (Inter Process Communication), as you're going to communicate with different processes. One possibility is: http://doc.qt.io/qt-5/qsharedmemory.html
    http://doc.qt.io/qt-5/qtcore-ipc-sharedmemory-example.html



  • @jsulm

    Hi, I have looked at several examples of qsharedmemory but I just don't see what it can do to my case. What is to be shared among the tabs?


  • Qt Champions 2018

    @lansing said in Chrome like tab with separate process for each?:

    What is to be shared among the tabs?

    That's something you have to know. If you want to use one process for each tab then you need to communicate with all these processes, right? Each process has its own memory and is isolated from other processes, you can't easily exchange data between them, so you need to use some kind of IPC. If you still want to do it this way then you really need to learn IPC, there is no other way.



  • @jsulm

    Hi, this is the idea I have for now:

    I'll create a mainwindow program and text editor program. In the mainwindow program, it'll have qsharedmemory and qprocess and a button and the text editor program will have qsharedmeomory as well. When the button was clicked, it'll trigger a slot that start the text editor program with qprocess, and then set the geometry to make it looks like it was attaching to the mainwindow. When the button was clicked again, a new text editor process will start. And in the mainwindow I'll have some logic to hide the inactive process to make it looks like a tab.

    Will this setup work?


  • Qt Champions 2018

    @lansing Don't forget that each text editor will have its own window, which user can move around. You can integrate external windows into your main app using native APIs, but I don't know how exactly.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.