Qt application - open one process only - qt

I have Qt GUI application which I want that the user will open one only. I want that if the user will click first time on th exe - it will open the application and when he will click it again it will open the first one.
i don't want to do it with QtSingleApplication.
I want to know exacly how to open the GUI on the second time.
Help me please!

Even if you don't want to, QtSingleApplication is what works. If you want to learn how it is implemented, you can always read the source code.

Related

Raspberry Pi Custom SD Card Image

I have a project uses Qt GUI which works on raspberry-pi2; however I don't want users to interact with the operating system. I just want that the only application appears on the screen (from boot to shutdown) to be is my application. Actually the retropie project has done what I actually want. So I want to prepare an minimal SD Card image like that. Is there any tool or way to do that?
You can use openembedded http://www.openembedded.org/wiki/Main_Page for this.
Creat file that describe packages for your image, at your case base system + qt,
plus create description of package of your program, that include .service file for run you program at start with systemd. The command MACHINE=raspberry-something bitbake your-image
I'd just use the init scripts to run your application as soon as possible and make it handle all user inputs (keyboard and mouse) properly, without giving any way to the user to close it.

How to tell Atom to not remember last opened project?

I would like to retrieve the welcome screen (and only it) when I start Atom. That way, I'll be able to choose the project I want to work on each time I start Atom (currently, I have to close the project opened the last time).
I already re-enabled the Welcome package in the init.coffee file so I see the welcome screen each time I start Atom, but there are two problems.
First: this screen is now shown every time I open a new window, so every time I open another project than the current one (I use Projects Manager if it matters). It's not very useful, as I only want to see this screen when I start Atom.
Second: I see the welcome screen on start, but only as new tabs in the last opened project, so the problem remains the same.
Has someone a solution?
The setting you are looking for is Settings > Open Empty Editor On Start, which is on the Core Settings page, right under Ignored Names. Make sure to enable this setting, i.e. check the box. Whenever you start Atom from its icon now, it will start with an empty editor, and will not reopen your previously used files.
I came across this problem, too.
But I found that if I had 'openEmptyEditorOnStart: true' in the config.cson file, and each time I quit the Atom I did "Remove Project Folder" in the "Tree View", next time I opened the Atom edit, I can open it without the last opened project.
Hope it helps. :)
Proper configuration to get empty editor on every start:
✔️ Open Empty Editor On Start
✖️ Restore Previous Windows On Start
Just go to File > Reopen Project > Clear Project History. It worked for me.
I just switched of package tree view
Setting/packages tree-view - disable
And when open Atom it is free of project tree
You need to do both in Core settings:
check Open Empty Editor On Start
set Restore Previous Windows On Start to no

Differentiate windows copy & cut action in Qt GUI Application

How to identify if data in QClipboard is result of cut or copy of windows action ?
For e.g select the folder in windows explorer, press Ctrl+X (cut action), now activate Qt GUI application and paste it. now Qt application needs some mean to identify previous windows action if it needs to delete selected folder(in case of cut action in windows explorer) or not(in case of copy action in windows explorer)
There is no way to do this. The clipboard simply holds data. In fact, I don't think any operating system distinguishes between copy and cut. Cutting is essentially copying and then deleting the data at the source.
*edit:
The only way I could think to do this would be to have your application monitor key presses. So if the user ever types Ctrl+X you know they've cut. However that won't help if they right click to cut. Either way, it's not a great solution.

open with default editor and wait to be closed

we're developing an app that should be able to open specified file with default editor application. (so if it is .doc - it suppose to be opened by MSWord or openOffice)
But I also need to wait until user will close the editor, check if it was changed (by size and date), and upload it to the server.
So the following steps:
1) find def editor
2) open file
3) wait it be closed
4) do smth after that with the file.
now results of my research:
-> opening by def editor is simple: file.openWithDefaultApplication();
but there is no way to know that editor is closed (maybe by checking that file is not locked in timer???)
-> i can start the native process and pass file as parameter BUT looks like the code
NativeApplication.nativeApplication.getDefaultApplication(file.extension);
does not work for any extension :( - it doesnt work for "rtf", "doc" but works for "pdf"... and [file.openWithDefaultApplication()] works fine with any file!
any suggestions?
thx in advance!
but there is no way to know that
editor is closed
Correct. I do not believe what you want to do is possible with AIR. How would AIR be able to tell whether the file is open or not? You might want to look into using NativeProcess; but that would be reliant on the underlying OS/default program exposing APIs to let you know when the program was open and/or closed.
My only suggestion is that you don't have the Air application watch the file, but instead show a popup that say 'click okay when done editing file' and then upload it based on that.
The only other way I can think of this working is if you create both a .bat and a .sh file
(for both windows and macs/linux; select one or the other depending on the os) which open the file you want through NativeProcess (and of course, put 'wait') and then listen for the close event.

is there any command to pause, stop and close vlc player from command line?

Well i have an adobe air which runs vlc-player at background as service. i check that in Windows Task Manager , the service runs when air application launches.
here is the code
processArgs.push("--extraintf");
processArgs.push("rc"); //Remote control
processArgs.push("--rc-fake-tty"); //Use terminal as output
processArgs.push("screen://");
processArgs.push(":screen-fps=15");
processArgs.push(":screen-caching=100");
processArgs.push(":sout=#transcode{venc=x264{bframes=0,nocabac,ref=1,nf,level=13,crf=24,partitions=none},vcodec=h264,fps=15,vb=3000,width=800,height=600,acodec=none}:duplicate{dst=std{mux=mp4,access=file,dst='"+targetFile.nativePath+"'}}");
startupInfo.arguments = processArgs;
p = new NativeProcess();
p.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
p.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData);
p.addEventListener(NativeProcessExitEvent.EXIT, onExit);
now i want to close vlc-player on the button click event and i have searched the vlc- documents and found quit command and its syntax, it does not work as i have tried that syntax from windows command prompt also..
Which are the vlc-player commands that can pause,stop and close vlc-player??
Any useful link will be much helpful to me..
I've had quite a look around and looks like this (--rc-fake-tty) can't be done from Windows command line. Which means your current approach is out.
I don't no anything about Adobe but I have done some searching around and this guy has something written in C using the libVLC. Not sure if that will help or point you in the right direction.
The other thing I found was this post Adobe Air and VLC player which mentions that you should be able to use javascript and ActiveX controls on Windows. A guy in this forum has a javascript script which uses an ActiveX control to start, stop, pause etc.
There is a VLC command that you can send to override or set certain hotkeys. Search for next, prev, stop, quit, vol-up, etc in this document.
That's the best of my Googling abilities, hope it helps.
I dont want to agree that your code runs well on windows, becasue --rc-fake-tty will not run on windows, to hide the entire vlc window (it will be listed among the processes in Windows Task Manager) use --rc-quiet but to see command window use --no-rc-quiet.
To stop and quit using p.standardInput.writeUTFBytes("stop" + "\n"); is not working for me as well.

Resources