说我有一个QTableWidget,每排有一个QComboBox和一个QSpinBox.考虑一下我存储它们的值是一个QMap<QString /*Combo box val*/,int /*spin box val*/> theMap;
当comboBoxes值或旋转框值被更改时,我想更新theMap.所以我应该知道组合框的前一个值是什么,以便用新的值替换,comboBox并且还要处理旋转框的值.
我怎样才能做到这一点?
PS我决定创建一个插槽,当你点击一个表时,它会存储该行组合框的当前值.但这只适用于按行标题时.在其他地方(点击一个combobox或上面spinbox)itemSelectionChanged()信号QTableWidget不起作用.
所以一般来说我的问题是存储所选行的组合框的值,并且我将得到ComboBox或SpinBox改变甚至并且将theMap容易处理.
我有一个QTableWidget,用于显示大量数据,基本上来自函数f(a,b).所有一个值进入水平首部,所有b值代入垂直标头和所有F(A,B)到相应的小区.
列应该是可排序的.当用户单击某列时,该列中的所有值都将进行排序,所有其他列也将"同步",因为整行都已排序(使用单击的列作为排序标准).
这有效.除了"标题列",垂直标题.垂直标题不会更改,它不会与重组的行同步.这是预期的行为吗?这是我的代码中的错误吗?我如何进行垂直标题排序?或者我需要将我的b添加到普通列?
编辑:我现在通过使标题列成为普通列来解决它.虽然,我仍然会对垂直标题不与其他列排序的原因感兴趣.
表格设置:
QSplitter(在图像上突出显示)包含QTreeWidget(左)和QTableWidget(右):

QSplitter 中这两个小部件的非默认属性:
QTreeWidget
最小尺寸/宽度 = 150
QTableWidget
最小尺寸 / 宽度 = 300
尺寸策略 / 水平拉伸 = 1
基本上,上面的设置指定了这两个组件的最小宽度,这QTableWidget 就是在表单调整大小期间更改其宽度的宽度。
右侧的按钮位于QVBoxLayout并且其大小是固定的。
问题:
当调整表单QTreeWidget的宽度时,从最小 150 到未知的 256,然后才QTableWidget开始增长,而我预计QTreeWidget宽度根本不会增长,因为QTableWidget水平拉伸设置为 1。
请注意,这与 无关QSplitter,因为当我将这两个小部件放入时也会发生同样的情况QHBoxLayout。
更新:
将最大尺寸/宽度设置QTreeWidget为 150(与最小尺寸/宽度相同)以避免调整此小部件的大小,结果如下:

QTreeWidget现在固定为 150,但是当调整窗口大小时,两个小部件之间会出现空白。这个差距增长到256-150=106,然后QTableWidget开始扩大。
基本上结果是相似的,但是现在占据的这个时间区域QTreeWidget专门用于这个空白间隙。
我开始觉得这可能是 Qt 的错误。
技术信息:
我有一个QTableWidget,其中包含许多列,这些列只是复选框(有些列不是).我正在尝试实现一项功能,以便当用户右键单击与"仅复选框"列相关的标题项时,会显示"取消全部选中"或"全部检查"的选项.
到目前为止,我已设法customContextMenu通过以下信号实现:
self.headers = self.tblData.horizontalHeader()
self.headers.setContextMenuPolicy(Qt.CustomContextMenu)
self.headers.customContextMenuRequested.connect(self.show_header_context_menu)
self.headers.setSelectionMode(QAbstractItemView.SingleSelection)
Run Code Online (Sandbox Code Playgroud)
这导致以下上下文菜单调用:
def show_header_context_menu(self, position):
menu = QMenu()
deselect = menu.addAction("Clear Checked")
ac = menu.exec_(self.tblData.mapToGlobal(position))
if ac == deselect:
pass
#Actually do stuff here, of course
Run Code Online (Sandbox Code Playgroud)
这会弹出一个上下文菜单,但我找不到任何方法来获取右键单击的标题的索引,我已经尝试self.headers.selectedIndexes()过,self.headers.currentIndex()但这些似乎只与实际的表选择有关,而不是标题.
一旦我设法获得右键单击的标题索引,我就可以轻松地将菜单限制为仅在选择了正确的索引时显示(那些只有复选框的列),所以这是另外一件事.
我错过了什么?在此先感谢您的帮助.
我使用以下代码在我的第9列中放置一个复选框 QTableWidget
chkBoxItem = QtGui.QTableWidgetItem()
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
chkBoxItem.setCheckState(QtCore.Qt.Unchecked)
table.setItem(rowNo,9,chkBoxItem)
Run Code Online (Sandbox Code Playgroud)
哪里table是我的QtTableWidget.我需要将单击复选框的行添加到列表中..我到底怎么做到这一点?
亲切的问候,
我想知道是否正在通过鼠标调整QTableWidget的列.每当调整任何列的大小时,如何发出信号?
假设我有一个装满数据的二维数组,比如10 x 10.内容和行数可以随时改变.现在我想在QTableWidget中显示这些数据.
我使用超时1秒的计时器来刷新表格内容.如果我使用,在超时槽中
void slot_timeOut()
{
//Iterate over the rows
//and for each cell do something like
ui->tw_data->setItem(row, 0, new TableWidgetItem(data[row][0]);
ui->tw_data->setItem(row, 0, new TableWidgetItem(data[row][1]);
//...
ui->tw_data->setItem(row, 0, new TableWidgetItem(data[row][9]);
}
Run Code Online (Sandbox Code Playgroud)
使用新的TableWidgetItem让我很担心.我没有提及它,我从来没有删除它.
在一段时间内这是一个内存泄漏,或者由Qt管理,请帮助...
现在我可以处理QTableWidget函数中的所有按键eventFilter()(在myTable->viewport()->installEventFilter(this);构造函数中调用之后).
在编辑时,唯一不起作用的地方是可编辑单元格(因为它会抓取所有按键).为了解决这个问题,我无法调用installEventFilter()表中的每个项目,因为这些项目不是QObjects(我也不能connect用于处理按键处理).
我唯一的解决方案是将QLineEdits放在这些单元格中,并使用事件过滤器在编辑时捕获按键.但是,仅使用标准物品可以解决它吗?(即只QTableWidgetItem带一面旗帜Qt::ItemIsEditable)
我也可以打电话grabKeyboard()给我QTableWidget.在这种情况下,我将按下所有按键(即使在用户编辑单元格时),但它会阻止编辑框(即用户无法输入任何内容).可能是在调用grabKeyboard()表后修复损坏的编辑框?
我有QTabWidget一个QTableWidget内部的,如下面的例子:
但是它在QTabWidget(图中标记为红色)中有一个“padding”(至少我认为是padding )。
如何删除它或扩展 QTableWidget 以填充 QTabWidget 区域?
我正在使用 Qt 5.3。
我有一个QTableWidget带有水平标题的 5 列。单击第 4 列的标题时,我需要启动一个函数。目前,我有一个可行的解决方案,它包括为单击的每个标题调用此函数,然后解析索引并测试它是否是正确的列。
这是当前的代码:
self.table = QtGuiWidgets.QTableWidget()
self.table.horizontalHeader().sectionClicked.connect(self.onHeaderClicked)
def onHeaderClicked(self, logicalIndex):
if logicalIndex == 4:
print "ok"
Run Code Online (Sandbox Code Playgroud)
有没有办法避免在每次单击标题时调用此函数,而只是在单击右列标题时调用它?
qtablewidget ×10
qt ×8
c++ ×4
pyqt ×3
python ×2
checkbox ×1
combobox ×1
pyqt4 ×1
qt-designer ×1
qt4 ×1
qtabwidget ×1
qtreewidget ×1
spinner ×1