2010-10-29 24 views

Respuesta

21

Creo que lo único que necesita aquí es algún tipo de widget de marcador principal. Si creas tu widget sin un padre, se considera una ventana de nivel superior. Pero si lo crea como hijo de una ventana de nivel superior, se considera una ventana secundaria y no recibe una entrada de la barra de tareas per se. La ventana padre, por otro lado, también no recibe una entrada de la barra de tareas, porque nunca antes ha establecido visible: Este código aquí funciona para mí:

class MyWindowWidget : public QWidget 
{ 
public: 
    MyWindowWidget(QWidget *parent) 
     : QWidget(parent, Qt::Dialog) 
    { 

    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    QMainWindow window; 

    MyWindowWidget widget(&window); 
    widget.show(); 

    return app.exec(); 
} 

Ninguna entrada barra de tareas se muestra cada vez, si esto es que desea destinado a.

+1

Estaba enfrentando esto con una aplicación y después de leer me di cuenta de que el problema era que alguien cometiera una creación de objeto con este objeto. Fue un error para mí. Eliminé 'this' y la aplicación funcionó perfectamente, es decir, la entrada de la barra de tareas regresó. Gracias. – Yash

5

Si desea mostrar/ocultar el widget sin mostrarlo nunca en la barra de tareas, podría verificar los marcadores de ventana de ese widget. No estoy 100% seguro, pero creo que utilicé Qt::Dialog | Qt::Tool y Qt::CustomizeWindowHint para lograr esto, pero mi ventana no estaba totalmente decorada también. Otra cosa que debes tener en cuenta si juegas es la política de salida de tu aplicación. Cerrar/Ocultar el último toplevel-window normalmente saldrá de su aplicación, por lo que tal vez necesite llamar al QApplication::setQuitOnLastWindowClosed(false) para evitar que ...

+1

'Qt :: Tool' es el indicador relevante que impide la entrada de la barra de tareas. – ens

+0

¿puede dar un código de ejemplo? – GeneCode

+0

Nvm lo consiguió: this-> setWindowFlags (Qt :: tool); – GeneCode

0

código Python a achive esto:

from PyQt5.QtCore import * 
from PyQt5.QtWidgets import * 

class MainWindow(QWidget): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent, Qt.Tool) 

window = MainWindow() 
window.show() 
3

Sólo hay que establecer Qt :: bandera subventana de widgets.

+0

Esta es definitivamente la respuesta más fácil. Funciona para mí con Qt5. – TheSHEEEP

+0

Es una buena solución si su ventana no tiene marco. Si lo hace, entonces no tendrá los botones predeterminados de Windows (cerrar, maximizar, minimizar). – Szpaqn

+0

¿Dónde coloco este código? ¿Puedes dar un ejemplo más detallado? – GeneCode

Cuestiones relacionadas