Repository: napari/napari

Issue:
The Help 'napari info' dialog box does not match the napari theme
## 🐛 Bug

Somewhere between napari release 0.4.5 and the current master branch, we've lost the theme that should be applied to the `napari info` dialog box from the Help menu.

On napari 0.4.5 I don't see this issue, the theme of the napari info dialog box matches the rest of napari.

## To Reproduce

Steps to reproduce the behavior:

1. Launch napari from the master branch
2. Click the `Help` menu, then the `napari info` menu item
3. Observe the colour of the dialog box, it doesn't match the rest of the 'dark' theme the way it used to do.

If you follow the same steps, but using a napari 0.4.5 installation, we don't see this issue.

I tried explicitly setting `viewer.theme = 'dark'`, in case napari was remembering a setting from last time or something, but no luck there.

<!-- If you have a code sample, error messages, stack traces, please provide it here as well -->

## Expected behavior

I expected the napari info dialog box to match the overall 'look' of the rest of napari. I also expect this will change depending on what theme is currently set in napari.

The 'keybindings' dialog box doesn't have the same weird behaviour.

## Environment

 - Please copy and paste the information at napari info option in help menubar here:
```
napari: 0.4.6.dev22+g02019b9
Platform: Linux-5.8.0-43-generic-x86_64-with-glibc2.10
System: Ubuntu 20.04.2 LTS
Python: 3.8.5 (default, Sep 4 2020, 07:30:14) [GCC 7.3.0]
Qt: 5.15.2
PyQt5: 5.15.2
NumPy: 1.19.2
SciPy: 1.5.2
Dask: 2.30.0
VisPy: 0.6.6

OpenGL:
- GL version: 4.6 (Compatibility Profile) Mesa 20.2.6
- MAX_TEXTURE_SIZE: 16384

Screens:
- screen 1: resolution 1920x1080, scale 1.0
- screen 2: resolution 1920x1080, scale 1.0

Plugins:
- console: 0.0.3
- svg: 0.1.4
- ```
 - Any other relevant information:

## Additional context

<!-- Add any other context about the problem here. -->



Discussion:
Probably a good first step here is using `git bisect` to narrow down on when this was introduced.
the general refrain that people should try remember about styles in Qt, is that widgets inherit their styles from their parents.  For this reason (and also for widget cleanup reasons), it's important that all widgets be assigned parents if at all possible.  This appears to be one of a few lingering cases of a custom widget not being given a parent, and can be fixed by: 
1) changing the `__init__` of the `QtAbout` dialog to pass a parent to the constructor
   ```python
    class QtAbout(QDialog):
    def __init__(self, parent):
        super().__init__(parent)
   ```
2) Passing the `qt_viewer` argument as the parent in the `showAbout` method:
   ```python
    @staticmethod
    def showAbout(qt_viewer):
        d = QtAbout(qt_viewer)
		# and delete this line
	    # d.setStyleSheet(qt_viewer.styleSheet())
   ```

Resolving patch:
diff --git a/napari/_qt/dialogs/qt_about.py b/napari/_qt/dialogs/qt_about.py
--- a/napari/_qt/dialogs/qt_about.py
+++ b/napari/_qt/dialogs/qt_about.py
@@ -15,6 +15,12 @@
 class QtAbout(QDialog):
     """Qt dialog window for displaying 'About napari' information.
 
+    Parameters
+    ----------
+    parent : QWidget, optional
+        Parent of the dialog, to correctly inherit and apply theme.
+        Default is None.
+
     Attributes
     ----------
     citationCopyButton : napari._qt.qt_about.QtCopyToClipboardButton
@@ -33,8 +39,8 @@ class QtAbout(QDialog):
         Layout widget for the entire 'About napari' dialog.
     """
 
-    def __init__(self):
-        super().__init__()
+    def __init__(self, parent=None):
+        super().__init__(parent)
 
         self.layout = QVBoxLayout()
 
@@ -75,15 +81,18 @@ def __init__(self):
         self.setLayout(self.layout)
 
     @staticmethod
-    def showAbout(qt_viewer):
+    def showAbout(qt_viewer, parent=None):
         """Display the 'About napari' dialog box.
 
         Parameters
         ----------
         qt_viewer : QtViewer
             QtViewer instance that the `About napari` dialog box belongs to.
+        parent : QWidget, optional
+            Parent of the dialog, to correctly inherit and apply theme.
+            Default is None.
         """
-        d = QtAbout()
+        d = QtAbout(parent)
         d.setObjectName('QtAbout')
         d.setStyleSheet(qt_viewer.styleSheet())
         d.setWindowTitle('About')
diff --git a/napari/_qt/qt_main_window.py b/napari/_qt/qt_main_window.py
--- a/napari/_qt/qt_main_window.py
+++ b/napari/_qt/qt_main_window.py
@@ -500,7 +500,7 @@ def _add_help_menu(self):
         about_action.setShortcut("Ctrl+/")
         about_action.setStatusTip('About napari')
         about_action.triggered.connect(
-            lambda e: QtAbout.showAbout(self.qt_viewer)
+            lambda e: QtAbout.showAbout(self.qt_viewer, self._qt_window)
         )
         self.help_menu.addAction(about_action)
 


Test patch: