How to remove minimize button from QMessageBox
-
wrote on 24 Nov 2017, 09:46 last edited by
Hi,
I am using Qt Creator in RaspberryPi3(Linux) , When I create a message box Minimize Button is displayed .
How to remove Minimize button ?
As another method,
Is there a way to ignore it even if I press the minimize button?The development environment is as follows.
RaspberryPi3 , Raspbian GNU/Linux 9.1 (stretch)
Qt Creator 4.2.0、Qt 5.7.1 (GCC 6.2.1 20161124, 32 bit) -
Hi,
I am using Qt Creator in RaspberryPi3(Linux) , When I create a message box Minimize Button is displayed .
How to remove Minimize button ?
As another method,
Is there a way to ignore it even if I press the minimize button?The development environment is as follows.
RaspberryPi3 , Raspbian GNU/Linux 9.1 (stretch)
Qt Creator 4.2.0、Qt 5.7.1 (GCC 6.2.1 20161124, 32 bit)@Kucchan See http://doc.qt.io/qt-5/qwidget.html#windowFlags-prop and Qt::WindowMinimizeButtonHint
-
wrote on 27 Nov 2017, 04:19 last edited by
Dear jsulm
Thank you for your comment.
But I can not solve the problem.I tried the following contents, but I could hide the minimize button in Windows OS, but in RaspberryPi 3 (Linux) I could not hide the minimize button.
http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.htmlHow can I hide the minimize button on RaspberryPi 3?
-
Dear jsulm
Thank you for your comment.
But I can not solve the problem.I tried the following contents, but I could hide the minimize button in Windows OS, but in RaspberryPi 3 (Linux) I could not hide the minimize button.
http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.htmlHow can I hide the minimize button on RaspberryPi 3?
wrote on 27 Nov 2017, 08:08 last edited by@Kucchan
You may not be able to. It depends on whether your OS/desktop allows this, Qt is using platform's native windows, Windows does, there is no guarantee that Pi/Ubuntu/GNOME or whatever you are using supports removing just the minimize button.For example, from the Qt docs:
In Linux with KDE this code make a window without an close and minimize and maximize buttons in title bar.
setWindowFlags( Qt::Dialog | Qt::WindowTitleHint );
-
wrote on 27 Nov 2017, 09:26 last edited by
QMessageBox box. box.setText("randomText"); box.setWindowFlags(box.windowFlags() & (~Qt::WindowMinimizeButtonHint));
Should do the trick, but as @JNBarchan mentioned earlier it's platform dependent.
-
QMessageBox box. box.setText("randomText"); box.setWindowFlags(box.windowFlags() & (~Qt::WindowMinimizeButtonHint));
Should do the trick, but as @JNBarchan mentioned earlier it's platform dependent.
wrote on 27 Nov 2017, 09:42 last edited by@dream_captain
Since he says:I tried the following contents, but I could hide the minimize button in Windows OS, but in RaspberryPi 3 (Linux) I could not hide the minimize button.
I presume that indicates he has the right code, it works under Windows but not under Linux....
-
wrote on 27 Nov 2017, 10:03 last edited by
Thank you everyone.
I tried '~ Qt :: WindowMinimizeButtonHint' but it was useless.
It seems impossible to remove Minimize button.
So,Please tell me how to not minimize the window by clicking the minimize button. -
Hi,
Can you show the code you are currently using for your message box ?
-
wrote on 28 Nov 2017, 01:10 last edited by
Dear SGaist
It is the code that challenged to remove minimize button of MainWindow and QMessageBox.
MsgBox.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MsgBox
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.uimain.cpp
#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{
Qt::WindowFlags flags;QApplication a(argc, argv); MainWindow w; flags = w.windowFlags(); flags = flags & ~Qt::WindowMinimizeButtonHint; w.setWindowFlags(flags); w.show(); return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_pushButton_clicked()
{
QMessageBox msgBox(this);
msgBox.setText(tr("MessageText"));
msgBox.setWindowTitle(tr("Title"));
msgBox.setIcon(QMessageBox::Critical);
msgBox.setWindowFlags(Qt::Window | Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint);
msgBox.exec();
}mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();private slots:
void on_pushButton_clicked();private:
Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
mainwindow.ui
Only QpushButton is placed in MainWindow.
-
Dear SGaist
It is the code that challenged to remove minimize button of MainWindow and QMessageBox.
MsgBox.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MsgBox
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.uimain.cpp
#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{
Qt::WindowFlags flags;QApplication a(argc, argv); MainWindow w; flags = w.windowFlags(); flags = flags & ~Qt::WindowMinimizeButtonHint; w.setWindowFlags(flags); w.show(); return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_pushButton_clicked()
{
QMessageBox msgBox(this);
msgBox.setText(tr("MessageText"));
msgBox.setWindowTitle(tr("Title"));
msgBox.setIcon(QMessageBox::Critical);
msgBox.setWindowFlags(Qt::Window | Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint);
msgBox.exec();
}mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();private slots:
void on_pushButton_clicked();private:
Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
mainwindow.ui
Only QpushButton is placed in MainWindow.
wrote on 28 Nov 2017, 04:46 last edited by dream_captain@Kucchan
I was able to add and then remove minimize button fromQMessageBox
on my Linux Mint by settingQt::Window
flag first and then removingQt::WindowMinimizeButtonHint
QMessageBox msgBox; msgBox.setText("MessageText"); msgBox.setWindowTitle("Title"); msgBox.setWindowFlags(Qt::Window ); // add minimize button msgBox.setWindowFlags(msgBox.windowFlags()&(~Qt::WindowMinimizeButtonHint)); // remove minimize button msgBox.setIcon(QMessageBox::Critical); msgBox.exec();
Give it a try. Set
Qt::Window
and then removeQt::WindowMinimizeButtonHint
-
wrote on 28 Nov 2017, 06:49 last edited by
Dear dream_captain
Thank you for your comment.
But It was useless in the RaspberryPi3.If the minimize button can be remove, without
' ~Qt::WindowMinimizeButtonHint:WindowMinimizeButtonHint '.
(WindowsOS and Ubuntu)RaspberryPi3 seems to be unique.
-
Dear dream_captain
Thank you for your comment.
But It was useless in the RaspberryPi3.If the minimize button can be remove, without
' ~Qt::WindowMinimizeButtonHint:WindowMinimizeButtonHint '.
(WindowsOS and Ubuntu)RaspberryPi3 seems to be unique.
wrote on 28 Nov 2017, 07:02 last edited by@Kucchan
I don't think that you can inherit from QMessageBox and just ignore minimize event, since it's controlled by window manager.Does QDialog come with minimize button by default on your rasp?
-
@Kucchan
I don't think that you can inherit from QMessageBox and just ignore minimize event, since it's controlled by window manager.Does QDialog come with minimize button by default on your rasp?
wrote on 29 Nov 2017, 03:46 last edited byDoes QDialog come with minimize button by default on your rasp?
I tried QDialog on RaspberryPi3 and the minimize button was displayed.
(Not change WindowFlags.WindowFlags is default value)QDialog can’t remove minimize button by changing WindowFlags.
-
Does QDialog come with minimize button by default on your rasp?
I tried QDialog on RaspberryPi3 and the minimize button was displayed.
(Not change WindowFlags.WindowFlags is default value)QDialog can’t remove minimize button by changing WindowFlags.
@Kucchan I think this is not a problem with Qt but with window manager used. As far as I know Raspbian uses its own (Pixel?).
-
wrote on 4 Dec 2017, 00:52 last edited by
Is there no way?
Do I need to give up? -
wrote on 4 Dec 2017, 04:34 last edited by
@Kucchan
You can try an ugly workaround: derive fromQDialog
and play aroundQt::FramelessWindowHint
to hide top buttons completely. Then addQPushButton
on form and create a connectionconnect(ui->closeButton, &QPushButton::clicked, this, &QDialog::accept);'
to imitateQMessageBox
behavior. -
@Kucchan
You can try an ugly workaround: derive fromQDialog
and play aroundQt::FramelessWindowHint
to hide top buttons completely. Then addQPushButton
on form and create a connectionconnect(ui->closeButton, &QPushButton::clicked, this, &QDialog::accept);'
to imitateQMessageBox
behavior.wrote on 5 Dec 2017, 05:01 last edited byThank you for your comment.
I will make a message box by QDialog. -
Dear SGaist
It is the code that challenged to remove minimize button of MainWindow and QMessageBox.
MsgBox.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MsgBox
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.uimain.cpp
#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{
Qt::WindowFlags flags;QApplication a(argc, argv); MainWindow w; flags = w.windowFlags(); flags = flags & ~Qt::WindowMinimizeButtonHint; w.setWindowFlags(flags); w.show(); return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_pushButton_clicked()
{
QMessageBox msgBox(this);
msgBox.setText(tr("MessageText"));
msgBox.setWindowTitle(tr("Title"));
msgBox.setIcon(QMessageBox::Critical);
msgBox.setWindowFlags(Qt::Window | Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint);
msgBox.exec();
}mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();private slots:
void on_pushButton_clicked();private:
Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
mainwindow.ui
Only QpushButton is placed in MainWindow.
wrote on 4 Jan 2020, 20:52 last edited by@Kucchan Too late with the answer, but this works for me on a RPi3 with Raspbian:
msgBox.setWindowFlags( ( Qt::Window | Qt::CustomizeWindowHint ) &~ ( Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint ) );
someone else could be looking for the same answer as I did.