Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

[Solved]My dialog inside of my mainwindow is not working



  • Hey , yesterday I opened a post:

    http://qt-project.org/forums/viewthread/42376/

    and the guy said that I should try creating a transparent window , and I did it , I included the project " the transparent window " to my current project which has the problem that I opened a post for.. anyways my other dialogs are working when I use show and other methods , but when I used this:

    @
    FrameLess=new FramelessWindow(this);
    FrameLess->exec(); // show() is not working
    @

    it works , only problem is it hides my mainwindow and it doesn't really show the background transparent window

    here's the code for the frameless window:

    @

    this->setStyleSheet("background:transparent");
    this->setAttribute(Qt::WA_TranslucentBackground);
    this->setWindowFlags(Qt::FramelessWindowHint);
    this->setWindowState(Qt::WindowFullScreen);

    @

    I only want it to show when I click any button " shows as a full screen transparent window that I can click anywhere in it without effecting the programs behind the window , I want it like a transparent wall :D



  • Well , I think I got it only problem as I said it doesn't show...

    I added mouse events where when I press the left mouse button I can select anywhere in the widget, the only problem which is annoying is:

    @
    this->setAttribute(Qt::WA_TranslucentBackground);
    @

    this is the function that lets the widget be transparent , but when I use it the widget shows in the bar below " where all programs that are open are there " but i can select anything in the screen , which means it's not showing on the screen ?



  • I've tried everything :( , is there another method to do this ?

    I saw this but still no one have a solution:

    http://www.qtcentre.org/threads/53362-Qt5-Translucent-alpha-channel-problems



  • Here is how I created a transparent window that fly on top of all windows and allows me to grab an area of a desktop. The key is a Qt::ToolTip.
    I have found this idea somewhere but I don't have a link.
    It works for me on Linux, have not tried it on Windows or MacOSX.

    @
    SelectImage::SelectImage(QWidget parent)
    : QWidget(parent)
    , m_rubberBand(nullptr)
    {
    setAttribute(Qt::WA_TranslucentBackground, true);
    setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
    QDesktopWidget
    desktop = QApplication::desktop();
    resize(desktop->screenGeometry().size());
    setCursor(Qt::CrossCursor);
    }
    @

    Then I used the events from QRubberBand example and here is my mouseReleaseEvent
    @
    void SelectImage::mouseReleaseEvent(QMouseEvent *event)
    {
    m_close = event->pos();
    m_rubberBand->hide();
    QRect grabRect = QRect(m_open, m_close).normalized();
    m_pixmap = QPixmap::grabWindow(QApplication::desktop()->winId())
    .copy(grabRect);
    close();
    parentWidget()->show();
    }
    @



  • Still didn't work :(

    not sure if it needs to be a child of another widget ? but I think it won't work since I've tried yesterday " not your method , but the one that I've posted " but still didn't work.

    the window doesn't show/display , it's like there's nothing , I can't use my events at all! but when I delete

    @
    this->setAttribute(Qt::WA_TranslucentBackground);
    @

    it works fine except it's not transparent.



  • Do you use style-sheets ? I think if you apply style-sheets then widgets behavior is different.
    If you building screen snapshot tool then there is another idea.

    • On start create a QPixmap from desktop
    • Create your "transparent" widget
    • Set background of the widget from the QPixmap.
    • Show new widget
    • Use QRubberBand to select area.
    • On mouseRelease close the widget.


  • [quote author="Project try" date="1399810333"]not sure if it needs to be a child of another widget ?[/quote]
    Yes transparent window is another QWidget that is shown on demand.
    I've used QWidget as parent class not QDialog.



  • Thanks , I actually thought of this yesterday , but never thought it would work , it actually worked doing what you've said , thanks so much ^^

    but there's a little problem I think I'll make a new post about it since it's not related to this problem.


Log in to reply