How to disable the close button of window using Qt? - qt

I want to disable the close button on the window (main application window) when an operation starts so user can't exit the application and enable it again when the operation is complete. How can I do that in Qt application? My platform is windows 7.
Alternatively I could show a message if user press close button and exiting application that a process is running in the background and abort closing the application.
How can I do either?

If you want disable button, you can use next:
auto flags = windowFlags();//save current configuration
//your main configuration which do the trick
setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint );
//...
setWindowFlags(flags);//restore
If you are sure that such "feature" will not irritate your users, you can use this, in another case use link from the comment.

Related

what is the Function that takes place upon reopening app

I created an app using Xamarin.Forms. I am trying to detect if there is a change in phone's language each time the app is reopened after being closed using the back button. Tried to Debug.WriteLine on each of onStart, onSleep and onResume to see which one occurs when I open the app again but none of them worked. This is what i tried:
App.xaml.cs
protected override void OnStart()
{
Debug.WriteLine("onresume");
//CultureInfo language = CultureInfo.InstalledUICulture;
//Thread.CurrentThread.CurrentUICulture = language;
//ApplicationResource.Culture = language;
//Application.Current.MainPage = new NavigationPage(new MainPage());
}
protected override void OnSleep()
{
Debug.WriteLine("onsleep");
}
protected override void OnResume()
{
Debug.WriteLine("onresume");
}
How do I know when the app is reopened so I could try the language change code?
If i understand your concern correctly two things can help you:
On android you can have a very wierd behavour if you do not specify SingleTask for your mainactivty. Basically if you "close" the app using Back button and then click on app icon, the app is launched from start recreating App but keeps static variables and the debugger is still connected too. You can detect it setting a static variable, then checking it with a breakpoint inside App.cs constructor. So the avoid such just use LaunchMode = LaunchMode.SingleTask inside the MainActivity.cs [Activity] attribute. This way after you return to the app after the Back button + click on icon you'll get a fresh new app with OnStart invoked.
Some could say to use LaunchMode.SingleInstance but it will kill your app if you click on push notification whie app is active so better use SingleTask, it will open smoothly the running app.
To store and retrieve data between app launches use local persistent storage, full docs: https://learn.microsoft.com/en-us/xamarin/essentials/preferences?tabs=android. So when you got your language store it, then at app start (App.cs constructor) check values.
I had done a simple to test your code with the Android simulator. And I use the Console.WriteLine instead of the Debug.WriteLine.
I had found that:
When the app exited with the back button, it will call the OnSleep method and if you get into the app in the recent task, it will call the OnStart method.
When the app go to background with the home button, it will call the OnSleep methed too, but if you get into the app in the recent task, it will call the OnResume method.
So if you add a break point in the OnStart method, when you exit with the back button and get into the app again, it will hit the break point.

The Run button on PopSQL not working [greyed out]

The run button in PopSQL greyed out a while ago after I restarted my laptop. No matter how I tried I couldn't click on it. I re-checked, double-checked my queries but it still didn't work.
Please help.
First of all, check the following -
Your query - Check for semantic errors.
Your database connection - There may be some fault in the connection itself. Try connecting again with the database. Check if just above the tab where the connection is specified if you can see your database name like this -
If you have just installed MySQL in your laptop (or anyways, now you don't have any other option) -
Open run from Start Menu or press windows key + R.
Search for 'services.msc'.
In the search window, search for MySQL80. Double click on it to open.
You will notice that the service is either disabled (in startup type) or stopped in the service status.
Select Automatic or Automatic (Delayed start) in the select box of Startup type and click on apply. So that whenever your machine starts the MySQL service will start automatically in the background.
After that click on the Start button to start the MySQL service on your machine. It will take a few seconds to start.
Then click on apply and hit Ok. Then close the services window also.
Now try opening PopSQL you'll see that database connection has been corrected.
ENJOY!!!

Don't know how to kill app process in KaiOS

I am developing an app that uses ws connection on KaiOS. When I press back and put the app in the background, somehow the app instance is not killed. I can still get message coming in from ws connection even though the app is in background. This makes the phone runs out of battery quickly because exited app remains in the runtime process I suppose.
But, I do need a situation where the app runs in background (not killed).
So, the question is, do we have access to kill an app process, for example when user press something or normally when app is closed and screen back to menu screen from app screen?
I think you can observe the Backspace key and close the window.
Such as:
function handleKeydownEvent(e) {
if (e.key == 'Backspace') {
e.preventDefault();
window.close();
}
}
document.body.addEventListener("keydown", handleKeydownEvent);

How to add support for screen timeout while running a qt5.9 app on linuxfb platform?

I'm using a qt5.9 app on imx6slevk board with yocto bsp,
Before running the app I see a virtual terminal on the display and this screen blanks after 10 minutes as specified in the driver file found at Kernel_source > drivers/tty/vt/vt.c
static int blankinterval = 10*60;
Just as this file is used for virtual terminal the file qlinuxfbscreen.cpp is used by qt applications running on linuxfb.
I didn't find any option of do_screen_blank or do_screen_unblank in this file
All I found was this function:
static void blankScreen(int fd, bool on)
{
ioctl(fd, FBIOBLANK, on ? VESA_POWERDOWN : VESA_NO_BLANKING);
}
on passing on = 1 the screen goes off completely with no display at all
I tried setting Idleaction in systemd/logind.conf
IdleAction=suspend
IdleActionSec=30Sec
after this the app turns off after 30 sec but it does so even if I press keys on the matrix keypad, systemd doesn't seem to register key press as active events and the screen turns off.
Is there any patch that I can apply to enable screen timeout? Or could I at least register key press as active event in systemd?
You'd need to modify your qt app.
The algorithm would be something like
Start timer
If key pressed reset timer to max value
If no key pressed go to suspend mode, you may use:
system("echo mem > /sys/power/state")
Wakeup on power key press.

Stop Processing Of ASP.Net Web Form on Opening an Exe

In my ASP.net application, i have to open a EXE on click of button. When the EXE is open, User should not be allowed to perform any action on the web form, i.e. the exe should behave like a modal popup. I am using the current code to open and return value from EXE.
Dim p As Process
p = Process.Start("D:\VS2010Projects\SignatureCaptureWindows\bin\Debug\SignatureCaptureWindows.exe")
p.WaitForExit()
If (Not p.ExitCode.Equals(0)) Then
Response.Write("Image Successfully saved in Database with ID = " + p.ExitCode.ToString())
DisplaySavedImage(p.ExitCode)
End If
The Exe is opening fine and returning the correct value. However, the user is able to perform action on the web form when the exe is open...
What will be the best way to handle such a scenario ??
Its impossible to do the way you won it. From the moment the user send a submit, or try to open the page, and on code behind you run this exe, then user is wait for the results - in this time you can not make the user to not do anything else - you can not lock the browser, user can close it, reload it, open again the same page, etc.
What you can do is to lock this process using Mutex and not allow to run again if all ready run it.
Mutex on msdn with example : http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx

Resources