标签: qmainwindow

将QWidget升级到QMainWindow或从Qt Designer将QMainWindow添加到QWidget

我的问题:

我想自定义title bar工作方式并查找我的应用程序。

我的想法:

我在中创建了一个新QWidget表单Qt Designer并添加了一个QWidget。我在构造函数中添加了以下代码:

setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint);

QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(20);
effect->setXOffset(0);
effect->setYOffset(0);
setGraphicsEffect(effect);
Run Code Online (Sandbox Code Playgroud)

这使外部小部件透明,并向我的内部小部件添加阴影。由此,我可以创建一个自定义标题栏小部件,可以根据需要实现它。

结果如下:

在此处输入图片说明

我的问题

我想打从设计师这个可以作为一个主窗口和QWidget不允许我添加从设计师tool barsmenu barstatus bar

我想到的是添加一个QMainWindow小部件作为外部QWidget的子小部件(它是透明的,并充当对我的阴影的支持(在其上绘制阴影))。我成功完成了此操作,但仅通过代码完成了:

QMainWindow *centralwidget = new QMainWindow();
centralwidget->setStyleSheet("background-color: lightgray;");
centralwidget->setGeometry(0, 0, 50, 20);
centralwidget->setWindowFlags(Qt::Widget);
this->layout()->addWidget(centralwidget);

QMenuBar *menuBar = new QMenuBar(centralwidget);
menuBar->addAction("Action");

QStatusBar *statusBar = new QStatusBar;
statusBar->showMessage("Status bar here");

centralwidget->addToolBar("tool bar");
centralwidget->setMenuBar(menuBar);
centralwidget->setStatusBar(statusBar);
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此处输入图片说明

我的问题:

我如何从中获得此结果Qt Designer?是否有可能推广QWidget到 …

c++ qt qwidget qmainwindow qt5

5
推荐指数
1
解决办法
2715
查看次数

pyQt5更改MainWindow标志

我使用python 3.4,pyQt5和Qt设计器(Winpython发行版).我喜欢由设计师制作guis并使用setupUi在python中导入它们的想法.我可以显示MainWindows和QDialogs.但是,现在我想设置我的MainWindow,总是在顶部,只有关闭按钮.我知道这可以通过设置Windows标志来完成.我尝试做如下:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    form = MainWindow()
    form.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

MainWindow显示(没有错误)但不应用Flags.我想这是因为我要求在已经创建后更改Windows属性.现在,问题是:我怎么能直接修改Ui_MainWindow呢?可以在Qt设计器中更改标志吗?谢谢

python flags qt-designer qmainwindow pyqt5

5
推荐指数
1
解决办法
7379
查看次数

如何逐步更新QMainWindow?

我想一步一步地更新我的QMainWindow.我使用睡眠方法,但我看不到变化.我想每隔3秒看一次变化.

void MainWindow::updateScreen()
{
    ui->pushButton1->show();
    QThread::sleep(3);

    ui->pushButton2->show();
    QThread::sleep(3);

    ui->pushButton3->show();
    QThread::sleep(3);
}
Run Code Online (Sandbox Code Playgroud)

但在9秒后,所有更改立即生效.

c++ qt qmainwindow qt5

5
推荐指数
2
解决办法
149
查看次数

使QMainWindow只能水平调整大小 - 也就是说,宽度可调整大小,但高度是固定的

我可以制作一个QMainWindow,网格布局只能水平调整,而不能垂直调整吗?

我希望它的垂直尺寸是保持所有按钮/线条编辑所需的最小尺寸.

c++ layout qt resize qmainwindow

4
推荐指数
2
解决办法
8691
查看次数

QMainWindow中的QT 4.8填充

我开始学习QT了.当我创建一个MainWindow并在其布局中放置一些小部件时,窗口边缘和小部件之间存在间隙,如下所示:

在此输入图像描述

我怎样才能关掉这个空白呢?

layout()->setContentsMargins(0,0,0,0); 和编辑窗口的样式表,但没有效果.我该怎么办?

c++ qt qmainwindow qt4.8

4
推荐指数
1
解决办法
2171
查看次数

Tabify 3 QDockWidget

如何在QMainWindow中为3个小部件创建一个表格化的底座?

我正在使用下面的代码:

widget1 = new QDockWidget(this);
widget1 ->setObjectName("name1");
addDockWidget(Qt::LeftDockWidgetArea, widget1);
widget2 = new QDockWidget(this);
widget2 ->setObjectName("name2");
addDockWidget(Qt::LeftDockWidgetArea, widget2);
tabifyDockWidget(widget2, widget1);
widget3 = new QDockWidget(this);
widget3->setObjectName("name3");
addDockWidget(Qt::LeftDockWidgetArea, widget3);
tabifyDockWidget(widget3, widget1);
Run Code Online (Sandbox Code Playgroud)

此代码生成两个停靠点:Dock 2,Dock 1和3.

c++ qdockwidget qmainwindow qt5

4
推荐指数
1
解决办法
2892
查看次数

PyQt:如何隐藏QMainWindow

单击Dialog_01的按钮将隐藏其窗口并打开Dialog_02。单击Dialog_02的按钮应关闭其窗口并取消隐藏 Dialog_01。如何实现呢?

import sys, os
from PyQt4 import QtCore, QtGui    

class Dialog_02(QtGui.QMainWindow):
    def __init__(self):
        super(Dialog_02, self).__init__()

        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()       

        Button_02 = QtGui.QPushButton("Close THIS and Unhide Dialog 01")
        Button_02.clicked.connect(self.closeAndReturn)
        myBoxLayout.addWidget(Button_02)

        myQWidget.setLayout(myBoxLayout)
        self.setCentralWidget(myQWidget)
        self.setWindowTitle('Dialog 02')

    def closeAndReturn(self):
        self.close()

class Dialog_01(QtGui.QMainWindow):
    def __init__(self):
        super(Dialog_01, self).__init__()

        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()       

        Button_01 = QtGui.QPushButton("Hide THIS and Open Dialog 02")
        Button_01.clicked.connect(self.callAnotherQMainWindow)
        myBoxLayout.addWidget(Button_01)        

        myQWidget.setLayout(myBoxLayout)
        self.setCentralWidget(myQWidget)
        self.setWindowTitle('Dialog 01')

    def callAnotherQMainWindow(self):
        self.hide()
        self.dialog_02 = Dialog_02()
        self.dialog_02.show()
        self.dialog_02.raise_()

if __name__ …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtgui qmainwindow

4
推荐指数
1
解决办法
7167
查看次数

Qt:为什么添加布局到MainWindow(通过代码)不起作用,但添加为CentralWidget工作?

我已经编写了一个QWidget MyWidget,我想增加两个MyWidgetQVBoxLayoutMainWindow类(同MainWindow其提供的默认当我们打开Qt Creator中).所以,我所做的是,在构造函数中MainWindow,我拿了两个指针MyWidget,指向同一个类的实例,然后将小部件添加到a QVBoxLayout和被调用setLayout,但是当我运行代码时,ui什么都没有!

演示代码(不起作用):

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLayout>
#include "mywidget.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QVBoxLayout *layout;
    layout=new QVBoxLayout();
    MyWidget *a=new MyWidget(),*b=new MyWidget();
    layout.addWidget(a);
    layout.addwidget(b);
    setLayout(layout);
}
Run Code Online (Sandbox Code Playgroud)

但是MainWindow什么都没显示.现在,根据这个答案,我必须为窗口小部件添加布局,然后将新窗口小部件设置为窗口小部件MainWindow.我这样做了,那很有效.

新的演示代码(工作):

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLayout>
#include "mywidget.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QVBoxLayout *layout;
    layout=new QVBoxLayout();
    MyWidget *a=new MyWidget(),*b=new MyWidget(); …
Run Code Online (Sandbox Code Playgroud)

qt qwidget qmainwindow

4
推荐指数
1
解决办法
2570
查看次数

PYQT5 QMainWindow setCentralWidget 由多个框布局组成

对于编程类的项目,我们需要开发一个应用程序,并且必须使用 PYQT5 作为 GUI。

我有一个基于 QMainWindow 的课程。有几行代码我不太明白。下面是初始化:

# Snippet 1
class ApplicationWindow(QtWidgets.QMainWindow):
def __init__(self):
    QtWidgets.QMainWindow.__init__(self)
    # self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    self.setWindowTitle("Main Window")
Run Code Online (Sandbox Code Playgroud)

然后,定义以下变量/GUI 元素:

    # Snippet 2
    self.main_widget = QtWidgets.QWidget(self)

    l = QtWidgets.QVBoxLayout(self.main_widget)
    sc = MyStaticMplCanvas(width=5, height=4, dpi=100) # just some graph
    dc = MyDynamicMplCanvas(width=5, height=4, dpi=100) # another graph
    l.addWidget(sc)
    l.addWidget(dc)
Run Code Online (Sandbox Code Playgroud)

然后,我尝试添加包含以下内容的水平框布局:

   # Snippet 3
    x = QtWidgets.QHBoxLayout(self.main_widget) # new
    b1 = QtWidgets.QPushButton("Test1") # new
    b2 = QtWidgets.QPushButton("Test2") # new
    x.addWidget(p1) # new
    x.addWidget(p2) # new
Run Code Online (Sandbox Code Playgroud)

最后,生成中央小部件:

    # Snippet 4
    self.main_widget.setFocus()
    self.setCentralWidget(self.main_widget) …
Run Code Online (Sandbox Code Playgroud)

python qmainwindow pyqt5

4
推荐指数
1
解决办法
1万
查看次数

获取添加到 QMainWindow 的扩展窗口小部件的引用

我使用一个使用 编写的软件Qt,它有一个QMainWindow对象。当添加到已经存在的对象时,我需要获取小部件的引用QMainWindow。我查看了 Qt 文档。我希望有什么活动childAdded或什么,但我什么也没找到。

请查看此代码:

import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QDockWidget
from PyQt5.QtCore import Qt

class MainWindow(QMainWindow):    
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)    
        self.button = QPushButton("A Button!")
        self.setCentralWidget(self.button)

def do_something(w):
    w.setWindowTitle("Newly Added")

def add_dock_widget(win):
    win.addDockWidget(Qt.RightDockWidgetArea, QDockWidget())

app = QApplication(sys.argv)
window = MainWindow()
window.show()

add_dock_widget(window)
# At this point, somehow, I need to get the reference of added widget.
# Because add_dock_widget method doesn't return any reference.

# I'm …
Run Code Online (Sandbox Code Playgroud)

python qdockwidget python-3.x qmainwindow pyqt5

4
推荐指数
1
解决办法
2717
查看次数

标签 统计

qmainwindow ×10

c++ ×5

qt ×5

python ×4

pyqt5 ×3

qt5 ×3

qdockwidget ×2

qwidget ×2

flags ×1

layout ×1

pyqt ×1

python-3.x ×1

qt-designer ×1

qt4.8 ×1

qtgui ×1

resize ×1