Details
-
Bug
-
Resolution: Duplicate
-
P2: Important
-
None
-
5.11.0
-
None
-
MacOS 10.13.3
Qt 5.10.0
Description
I'm experiencing an issue with Qt 5.11.0 on on MacOS 10.13 where widgets are not redrawing after setText() is called. This problem did not exist in Qt 5.10.0, so it seems to have been introduced in 5.11.0. The problem occurs only on MacOS, and does not occur on Windows 8.1 or Linux Mint Cinnamon.
Example Program To Illustrate Problem
Here is a short program to demonstrate the issue:
testdlg.h
#ifndef TESTDLG_H #define TESTDLG_H #include <QtWidgets> class TestDlg : public QDialog { Q_OBJECT private: QLabel* label1; QLabel* label2; QPushButton* button; public: TestDlg() { label1 = new QLabel(tr("<h2>Process Running</h2>")); label2 = new QLabel(tr("Label that doesn't update")); button = new QPushButton(tr("Abort")); connect(button, SIGNAL(clicked()), this, SLOT(abort())); QVBoxLayout* layout = new QVBoxLayout; layout->addWidget(label1); layout->addWidget(label2); layout->addWidget(button); setLayout(layout); } private slots: void abort() { label1->setText(tr("<h2>Process Aborted</h2>")); label2->setText(tr("Label after abort")); button->setText(tr("Close")); } }; #endif // TESTDLG_H
main.cpp
#include <QApplication> #include "testdlg.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); TestDlg dialog; dialog.show(); return app.exec(); }
Clicking the "Abort" button causes the abort() function to be called, which changes the text on the two QLables and the QPushButton. However, on MacOS only the label1 text changes, and the label2 text and button text remain unchanged. This can be seen on the attached screenshot.
If you cover the dialog box with another window, then uncover it, the window will redraw with both QLables and the QPushButton all updated to the text set in abort(). It therefore seems that the text is being set but the widgets are not being redrawn until a redraw is triggered by covering and uncovering the window.
Running the same program on Windows or Linux with Qt 5.11.0 the problem does not occur and all three widgets update immediately upon pressing the "Abort" button. Testing the program on MacOS with Qt 5.10.0 the three widgets again update immediately when the "Abort" button is pressed. The issue is therefore exclusive to Qt 5.11.0 on MacOS.
Other Redraw Issues
At the bottom of the screenshot I have shown another redraw issue. In that example I commented out the three lines involving label1, ran the program and clicked the "Abort" button. As you can see, label2 has updated but parts of the original text still remain. It therefore appears that there are other general redraw issues in Qt 5.11.0 on MacOS that weren't present in Qt 5.10.0.
Attachments
Issue Links
- duplicates
-
QTBUG-68067 QPushButton's state (disabled) is not updated correctly
- Reported
-
QTBUG-68740 QTextEdit missing repaint after clear signal
- Closed