QTreeWidget上的信号itemChecked和itemUncheсked在哪里?
Qt Signals: (quote from PyQt4 QTreeWidget documentation page)
void currentItemChanged (QTreeWidgetItem *,QTreeWidgetItem *)
void itemActivated (QTreeWidgetItem *,int)
void itemChanged (QTreeWidgetItem *,int)
void itemClicked (QTreeWidgetItem *,int)
void itemCollapsed (QTreeWidgetItem *)
void itemDoubleClicked (QTreeWidgetItem *,int)
void itemEntered (QTreeWidgetItem *,int)
void itemExpanded (QTreeWidgetItem *)
void itemPressed (QTreeWidgetItem *,int)
void itemSelectionChanged ()
Run Code Online (Sandbox Code Playgroud)
目前我解决了这个问题:
self.treeWidget.itemClicked.connect (self.handle)
def handle (item, column):
print 'emitted!', item.text(column)
if item.checkState(column) == QtCore.Qt.Checked:
# there are a lot of my functions inside which work with item data
self.handleChecked(item, column) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Linux测试项目中的一些测试场景并获得内核源代码覆盖率.
我正在使用GCOV/LCOV这样做.
这是我到目前为止的事情:
基于GCOV的内核分析
CONFIG_GCOV_KERNEL = Y
CONFIG_GCOV_PROFILE_ALL = Y
在Linux内核版本:2.6.32.60 + drm33.26
我应该拥有的东西,但我没有
现在我想要的是运行测试场景并使用LCOV获取到目前为止使用的Linux内核代码的哪一部分.但是当我调用LCOV -c时,即使所有构建标志都没问题,这也是我得到的.
加载所需的gcov内核模块.
lcov:错误:无法加载所需的gcov内核模块!
有一个<2.6.30的内核补丁,之后内置它.
我在 Qt Designer 中创建了一个 UI 并将其转换为 python:

在空白区域中,我添加了一个滚动区域和一个网格布局来对齐我的按钮。
每次按下“CreatePose”按钮时,我都需要从左上角开始向 gridlayout 添加一个带有图标的按钮。现在它将它添加到网格布局的中心。
self.ui.PoseBtn_GridLayout.setColumnMinimumWidth(4,4)
self.button = QtGui.QPushButton('')
self.button.setIcon(self._icon)
self.button.setIconSize(QtCore.QSize(128, 128))
self.button.setMinimumSize(QtCore.QSize(128, 128))
self.button.setMaximumSize(QtCore.QSize(128, 128))
self.ui.PoseBtn_GridLayout.addWidget(self.button)
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
QShortcut可以轻松地将QShortcutEvent(按键,组合或序列)连接到插槽方法,例如:
QShortcut *shortcut = new QShortcut( QKeySequence(Qt::Key_7), this, 0, 0, Qt::ApplicationShortcut);
Run Code Online (Sandbox Code Playgroud)
(提示:对于数字键,可以使用QSignalMapper将QShortcut的activated()信号映射到带int参数的Slot ).
但是,在此示例中,使用NumLock(启用了numpad),两个"7"键都将触发Shortcut的activated()信号.
有没有一种方法来检测比过滤或重新实现Widget的其他不同的键keyPressEvent和检查QKeyEvent ::修饰符()的Qt的:: KeypadModifier?
我发现,进一步挖掘
QTBUG-20191的Qt :: KeypadModifier不setShortcut工作链接到已在2012年九月被合并到4.8补丁,并且配备了一个测试用例使用
button2->setShortcut(Qt::Key_5 + Qt::KeypadModifier);
Run Code Online (Sandbox Code Playgroud)
这对Qt 4.8.1上的QShortcut不起作用,即使用(添加)修饰符标志都不能识别'7'键.
所以我想最快的方法是安装一个过滤器来检测修饰符,并让默认实现处理所有其他的keyEvent,以便与QShortcut一起使用?
我有一个QTreeView(带有PyQt4),使用下面的代码自定义和调整大小的图标,但“大小”列显示错误的对齐/位置,如下所示:

self.ui.treeView.setIconSize(QtCore.QSize(30,30))
fileSystemModel = QtGui.QFileSystemModel(self.ui.treeView)
custonIconProvider = CustomIconsProvider()
fileSystemModel.setIconProvider(custonIconProvider)
self.ui.treeView.setModel(fileSystemModel)
self.ui.treeView.setRootIndex(fileSystemModel.setRootPath(forlderPath))
self.ui.treeView.setColumnWidth(0, 250)
self.ui.treeView.setColumnWidth(1, 70)
self.ui.treeView.setColumnWidth(2, 70)
Run Code Online (Sandbox Code Playgroud)
我已经搜索了http://pyqt.sourceforge.net/Docs/PyQt4/qtreeview.html文档以寻找可能的修复方法,但找不到任何明显的内容。
我正在尝试绘制 QGraphicScene 数据,该数据可能会根据情况而变化几个数量级。由于我使用的笔是装饰性的,因此我希望视图与数据的大小无关。但我得到的是这样的:
带噪声的正弦波乘以 50000:

带噪声的正弦波乘以 50:

但是,如果我放大这些图中的任何一个(两个图的缩放量相同),我最终会达到两个图像看起来相同的水平:

这里发生了什么?为什么数据值变大了,笔的宽度就变了?为什么放大后缩放比例消失了?
重现此内容的代码如下。左键单击图可放大,右键单击可缩小。
import sys
from PyQt4 import QtGui as QG
from PyQt4 import QtCore as QC
import numpy as n
class ZoomView(QG.QGraphicsView):
"""Zoomable QGraphicsView"""
def mouseReleaseEvent(self,event):
if event.button() == QC.Qt.LeftButton:
self.scale(1.5,1)
elif event.button() == QC.Qt.RightButton:
self.scale(1/1.5,1)
class MainUI(QG.QDialog):
def __init__(self, parent=None):
super(MainUI, self).__init__(parent)
layout = QG.QVBoxLayout()
self.setLayout(layout)
button_layout = QG.QHBoxLayout()
pb3 = QG.QPushButton('add plot')
button_layout.addWidget(pb3)
layout.addLayout(button_layout)
pb3.clicked.connect(self.scene_maker_singleshot)
scene = QG.QGraphicsScene()
view = ZoomView(self)
view.setTransformationAnchor(QG.QGraphicsView.AnchorUnderMouse)
view.setRenderHint(QG.QPainter.Antialiasing)
layout.addWidget(view)
view.setScene(scene)
self.view = view
self.scene = …Run Code Online (Sandbox Code Playgroud) 我做了多选QComboBox.项目是可检查的(每个项目都有复选框和文本值).只有在用户单击它时才会检查CheckBox.我想要的是在用户点击文本值时捕获信号,这样我就可以设置选中它旁边的复选框.怎么做?

这就是我将模型设置为组合框的方式:
areas = ["Area one", "Area two", "Area three", "Area four"]
model = QtGui.QStandardItemModel(5, 1)# 5 rows, 1 col
firstItem = QtGui.QStandardItem("---- Select area(s) ----")
firstItem.setBackground(QtGui.QBrush(QtGui.QColor(200, 200, 200)))
firstItem.setSelectable(False)
model.setItem(0, 0, firstItem)
for i,area in enumerate(areas):
item = QtGui.QStandardItem(area)
item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
item.setData(QtCore.Qt.Unchecked, QtCore.Qt.CheckStateRole)
model.setItem(i+1, 0, item)
self.ui.comboBox.setModel(model)
self.ui.comboBox.installEventFilter(self)
Run Code Online (Sandbox Code Playgroud)
我已经为阻止轮子事件添加了事件过滤器,因此firstItem文本总是显示为"已选择"
def eventFilter(self,target,event):
if target == self.ui.comboBox:
if(event.type()== QtCore.QEvent.Wheel):
#wheel event is blocked here
return True
return False
Run Code Online (Sandbox Code Playgroud) 我试图在运行时通过按下按钮来添加新的小部件(在下面的示例中我使用标签)。这里是例子:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Widget(QWidget):
def __init__(self, parent= None):
super(Widget, self).__init__()
btn_new = QPushButton("Append new label")
self.connect(btn_new, SIGNAL('clicked()'), self.add_new_label)
#Container Widget
self.widget = QWidget()
#Layout of Container Widget
layout = QVBoxLayout(self)
for _ in range(20):
label = QLabel("test")
layout.addWidget(label)
self.widget.setLayout(layout)
#Scroll Area Properties
scroll = QScrollArea()
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
scroll.setWidgetResizable(False)
scroll.setWidget(self.widget)
#Scroll Area Layer add
vLayout = QVBoxLayout(self)
vLayout.addWidget(btn_new)
vLayout.addWidget(scroll)
self.setLayout(vLayout)
def add_new_label(self):
label = QLabel("new")
self.widget.layout().addWidget(label)
if __name__ == '__main__':
app = …Run Code Online (Sandbox Code Playgroud) 首先,我按照以下步骤安装QScintilla:
1:
cd Qt4Qt5
qmake qscintilla.pro
sudo make
make install
Run Code Online (Sandbox Code Playgroud)
2:
cd ../designer-Qt4Qt5
qmake designer.pro
sudo make
sudo make install
Run Code Online (Sandbox Code Playgroud)
3:
cd ../Python
python3 configure.py --pyqt=PyQt5
sudo make
Run Code Online (Sandbox Code Playgroud)
在这里我遇到了问题:
QAbstractScrollArea: No such file or directory
Run Code Online (Sandbox Code Playgroud)
和问题:
qprinter.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但我终于通过手动添加所需文件解决了这些问题.
继续:
sudo make install
Run Code Online (Sandbox Code Playgroud)
4:
然后我输入以下命令安装eric6:
sudo python3 install.py
Run Code Online (Sandbox Code Playgroud)
但我得到了:
检查依赖项
Python版本:3.4.0
找到PyQt5
对不起,请安装QScintilla2及其PyQt5/PyQt4包装器.
错误:/usr/lib/python3/dist-packages/PyQt5/Qsci.so:未定义符号:_ZTI13QsciScintilla
我正在尝试使用 PyQt5 构建一个应用程序,当QListWidget双击a 中的项目时,该应用程序有一个辅助窗口“弹出” 。
这是代码:
import sys
from PyQt5.QtWidgets import QWidget, QListWidget, QListWidgetItem, QLabel, QPushButton, QApplication
class exampleWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
listWidget = QListWidget(self)
listWidget.itemDoubleClicked.connect(self.buildExamplePopup)
names = ["Jack", "Chris", "Joey", "Kim", "Duncan"]
for n in names:
QListWidgetItem(n, listWidget)
self.setGeometry(100, 100, 100, 100)
self.show()
@staticmethod
def buildExamplePopup(item):
name = item.text()
exPopup = examplePopup(name)
exPopup.setGeometry(100, 200, 100, 100)
exPopup.show()
class examplePopup(QWidget):
def __init__(self, name):
super().__init__()
self.name = name
self.initUI()
def initUI(self):
lblName = QLabel(self.name, self)
if …Run Code Online (Sandbox Code Playgroud) pyqt ×6
pyqt4 ×4
qt ×4
python ×3
linux ×2
pyqt5 ×2
c++ ×1
compilation ×1
gcov ×1
kernel ×1
layout ×1
lcov ×1
popup ×1
popupmenu ×1
python-3.x ×1
qcombobox ×1
qlabel ×1
qscintilla ×1
qscrollarea ×1
qt4 ×1
qtreeview ×1
qtreewidget ×1
resize ×1