我的问题:
我想自定义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 bars,menu bar和status 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到 …
我使用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设计器中更改标志吗?谢谢
我想一步一步地更新我的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秒后,所有更改立即生效.
我可以制作一个QMainWindow,网格布局只能水平调整,而不能垂直调整吗?
我希望它的垂直尺寸是保持所有按钮/线条编辑所需的最小尺寸.
我开始学习QT了.当我创建一个MainWindow并在其布局中放置一些小部件时,窗口边缘和小部件之间存在间隙,如下所示:
我怎样才能关掉这个空白呢?
layout()->setContentsMargins(0,0,0,0);
和编辑窗口的样式表,但没有效果.我该怎么办?
如何在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.
单击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) 我已经编写了一个QWidget MyWidget,我想增加两个MyWidget同QVBoxLayout在MainWindow类(同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) 对于编程类的项目,我们需要开发一个应用程序,并且必须使用 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) 我使用一个使用 编写的软件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) 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