我正在玩SVG教程,我只是加载了这样的图像:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg style="stroke-linejoin:round; stroke:black; stroke-width:0.5pt; text-anchor:middle; fill:none" xmlns="http://www.w3.org/2000/svg" font-family="Helvetica, Arial, FreeSans, Sans, sans, sans-serif" height="400px" width="400px" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 250 250">
<rect y="0" x="0" height="250" width="250" stroke="black" stroke-width="1" fill="blue" />
<image y="0" x="0" height="250" width="250" xlink:href="http://www.blueprintmodel.co.uk/images/DSCF1438.jpg" />
</svg>
Run Code Online (Sandbox Code Playgroud)
即使高度和宽度相同,我在viewBox的中心,"rect"上方获取图像.我的问题是:
在tableWidget中,我有一列完全由可检查项组成.我无法弄清楚如何使复选框居中或至少删除旁边的文本框.正如你在这张照片上看到的那样当我点击单元格时,文本框有那个丑陋的轮廓,如果有可能,我希望在整个表格中关闭它.我已经读过我需要使用代理人来控制项目/图标的位置,但对于像我这样的人来说理解这一点需要很长时间,所以如果有一些简单的解决方案可以使该列不那么难看,请举例,我们将不胜感激.
我做了多选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) 我需要将我的QTableWidget的第一列填充为:行:1,行:2 ...行:100,但排序不能按预期工作(数字).使用此代码排序工作正常,但我没有得到预期的文本:
for i in range(0, self.rows):
item = QtGui.QTableWidgetItem()
item.setData(Qt.DisplayRole, "Row: %s" %(i) )
item.setData(Qt.EditRole, i)
self.ui.tableWidget.setItem(i, 0, item)
Run Code Online (Sandbox Code Playgroud)
我得到:1,2,3,4 ......而不是Row:1,Row:2,Row:3 ...我期望EditRole将用于编辑目的(用于数字排序,它工作正常)但我还期望显示文本,因为它是使用DisplayRole设置的.我能以某种方式这样做,或者为了排序而编写函数是唯一的方法吗?
我正在使用JSF 2,我需要c:foreach用于某些目的.但无论我的列表有多大,c:foreach只循环一次,返回空值.我尝试了一切,我甚至在单独的.xhtml中分离了c:foreach,但它仍然给出了相同的结果.如果您需要一些代码,请询问,但我想使c:foreach至少在单独的.xhtml中工作,并且我会说它比在我的代码中也能工作.
在用我用于self.ui.tableWidget.resizeRowToContents
每一行的一些文本填充 tableWidget 时。之后 and: self.ui.tableWidget.setSortingEnabled(1)
,sorting 按预期工作,但行不再根据内容调整大小,实际上它们保留了以前的高度。
name name v name v
--------- --------- ---------
text2 text1line1 text1line1
--------- after sort is clicked: --------- expected: text1line2
text1line1 text1line3
text1line2 text2 ---------
text1line3 text2
--------- --------- ---------
Run Code Online (Sandbox Code Playgroud)
我的想法是在单击标题中的排序时捕获信号,然后再次self.ui.tableWidget.resizeRowToContents
遍历所有行。
如何捕捉该信号?
我有一个QTableWidget
第一列填充了可检查的项目,所以我需要重载这些项目才能对它们进行排序.当我单击该列的标题时,排序按预期工作(行已排序 - 首先是已检查的行,然后未检查).
当我运行我的GUI并且没有单击任何列的标题来排序表然后执行此操作时,会出现问题:
tableWidget.setSortingEnabled(0);
// check/uncheck some checkable items here
tableWidget.setSortingEnabled(1);
Run Code Online (Sandbox Code Playgroud)
在那种情况下,被覆盖的__lt__
被称为100次以上,但我没想到,因为我没有点击该列的标题进行排序.那么,为什么__lt__
叫?为什么它比较了一些可检查的项目,即使我没有点击该列的标题来对它们进行排序?
请帮助我,__lt__
当我有30多行时,调用消耗太多时间.