小编ekh*_*oro的帖子

如何在PyQt4中为QTreeWidget实现itemChecked和itemUnchecked信号?

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)

qt pyqt signals-slots qtreewidget pyqt4

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

Linux内核代码覆盖率 - GCOV

我正在尝试使用Linux测试项目中的一些测试场景并获得内核源代码覆盖率.

我正在使用GCOV/LCOV这样做.

这是我到目前为止的事情:

  • 构建配置中的GCOV标志

基于GCOV的内核分析

CONFIG_GCOV_KERNEL = Y

CONFIG_GCOV_PROFILE_ALL = Y

在Linux内核版本:2.6.32.60 + drm33.26

  • 构建内核后,我在源文件夹中包含了所有.gcov文件
  • 当我使用源文件作为输入时,GCOV/LCOV可以工作

我应该拥有的东西,但我没有

  • / proc/GCOV文件夹
  • GCOV内核模块(gcov.o?)

现在我想要的是运行测试场景并使用LCOV获取到目前为止使用的Linux内核代码的哪一部分.但是当我调用LCOV -c时,即使所有构建标志都没问题,这也是我得到的.

加载所需的gcov内核模块.

lcov:错误:无法加载所需的gcov内核模块!

有一个<2.6.30的内核补丁,之后内置它.

linux kernel code-coverage gcov lcov

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

如何从左上角开始向网格布局添加小部件

我在 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)

如何解决这个问题?

python layout pyqt

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

C++ Qt QShortcut with numpad key

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一起使用?

c++ qt keyboard-shortcuts

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

使用 QTreeView 行中的文本对齐方式错误

我有一个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文档以寻找可能的修复方法,但找不到任何明显的内容。

python pyqt text-alignment pyqt4 qtreeview

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

如何在QGraphicsScene上绘图而不缩放画笔宽度?

我正在尝试绘制 QGraphicScene 数据,该数据可能会根据情况而变化几个数量级。由于我使用的笔是装饰性的,因此我希望视图与数据的大小无关。但我得到的是这样的:

带噪声的正弦波乘以 50000:

规模50000

带噪声的正弦波乘以 50:

规模 50

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

缩放比例50000 在此输入图像描述

这里发生了什么?为什么数据值变大了,笔的宽度就变了?为什么放大后缩放比例消失了?

重现此内容的代码如下。左键单击图可放大,右键单击可缩小。

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)

qt qt4 pyqt pyqt4

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

从qComboBox弹出菜单中捕获鼠标按钮按下的信号

我做了多选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)

python popupmenu signals-slots pyqt4 qcombobox

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

PyQt:在运行时向滚动区域添加小部件

我试图在运行时通过按下按钮来添加新的小部件(在下面的示例中我使用标签)。这里是例子:

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)

qt resize pyqt qlabel qscrollarea

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

如何在Linux上编译QScintilla和Eric6?

首先,我按照以下步骤安装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

linux compilation pyqt qscintilla pyqt5

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

PyQt5 弹出窗口

我正在尝试使用 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)

popup python-3.x pyqt5

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