hazzmax
3rd May 2010, 22:23
Hey all!
I'm working on a custom asset browser using a QColumnView and I'm having trouble figuring out how to set the selection programatically. Does anyone have any tips/tricks?
The closest I've come was this:
myColumnView.selectionModel().select(index, Qt.QItemSelectionModel.SelectCurrent)
But this has two problems:
1: It only works if the index I'm trying to select is in the deepest active column.
2: Also it only highlights the item, it does not trigger the next column to populate based on the selection.
I'm using a custom ItemModel for my actual project, but I've tested just using QDirModel and gotten the same results.
If it helps, here's the basic gui I slapped together to try things out on. The copy button stores the index of the current selection and the select button tries to select that index. (Sorry for the python. Feel free to respond with C, if you have something that might help.)
import sys
from PyQt4 import Qt, QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(600, 400)
self.centralwidget = QtGui.QWidget(MainWindow)
self.vertialLayout = QtGui.QVBoxLayout(self.centralwidget)
self.columnView = QtGui.QColumnView(self.centralwidget)
self.model = QtGui.QDirModel()
self.columnView.setModel(self.model)
self.vertialLayout.addWidget(self.columnView)
MainWindow.setCentralWidget(self.centralwidget)
self.savedIndexes = None
self.buttonWidget = QtGui.QWidget(self.centralwidget)
self.buttonLayout = QtGui.QHBoxLayout(self.buttonWidget)
self.buttonLayout.setSpacing(0)
self.buttonLayout.setMargin(0)
self.copyIndexButton = QtGui.QToolButton(self.buttonWidget)
self.copyIndexButton.setText('Copy Index')
self.buttonLayout.addWidget(self.copyIndexButton)
self.selectIndexButton = QtGui.QToolButton(self.buttonWidget)
self.selectIndexButton.setText('Select Index')
self.buttonLayout.addWidget(self.selectIndexButton )
self.spacer = QtGui.QSpacerItem(50, 5, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.buttonLayout.addItem(self.spacer)
self.vertialLayout.addWidget(self.buttonWidget)
MainWindow.connect(self.copyIndexButton, Qt.SIGNAL('released()'), self.copyIndex)
MainWindow.connect(self.selectIndexButton, Qt.SIGNAL('released()'), self.selectIndex)
def copyIndex(self):
self.savedIndexes = self.columnView.selectionModel().selection().index es()
def selectIndex(self):
self.columnView.selectionModel().select(self.saved Indexes[0], Qt.QItemSelectionModel.SelectCurrent)
if __name__ == "__main__":
app = Qt.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Thanks!
I'm working on a custom asset browser using a QColumnView and I'm having trouble figuring out how to set the selection programatically. Does anyone have any tips/tricks?
The closest I've come was this:
myColumnView.selectionModel().select(index, Qt.QItemSelectionModel.SelectCurrent)
But this has two problems:
1: It only works if the index I'm trying to select is in the deepest active column.
2: Also it only highlights the item, it does not trigger the next column to populate based on the selection.
I'm using a custom ItemModel for my actual project, but I've tested just using QDirModel and gotten the same results.
If it helps, here's the basic gui I slapped together to try things out on. The copy button stores the index of the current selection and the select button tries to select that index. (Sorry for the python. Feel free to respond with C, if you have something that might help.)
import sys
from PyQt4 import Qt, QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(600, 400)
self.centralwidget = QtGui.QWidget(MainWindow)
self.vertialLayout = QtGui.QVBoxLayout(self.centralwidget)
self.columnView = QtGui.QColumnView(self.centralwidget)
self.model = QtGui.QDirModel()
self.columnView.setModel(self.model)
self.vertialLayout.addWidget(self.columnView)
MainWindow.setCentralWidget(self.centralwidget)
self.savedIndexes = None
self.buttonWidget = QtGui.QWidget(self.centralwidget)
self.buttonLayout = QtGui.QHBoxLayout(self.buttonWidget)
self.buttonLayout.setSpacing(0)
self.buttonLayout.setMargin(0)
self.copyIndexButton = QtGui.QToolButton(self.buttonWidget)
self.copyIndexButton.setText('Copy Index')
self.buttonLayout.addWidget(self.copyIndexButton)
self.selectIndexButton = QtGui.QToolButton(self.buttonWidget)
self.selectIndexButton.setText('Select Index')
self.buttonLayout.addWidget(self.selectIndexButton )
self.spacer = QtGui.QSpacerItem(50, 5, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.buttonLayout.addItem(self.spacer)
self.vertialLayout.addWidget(self.buttonWidget)
MainWindow.connect(self.copyIndexButton, Qt.SIGNAL('released()'), self.copyIndex)
MainWindow.connect(self.selectIndexButton, Qt.SIGNAL('released()'), self.selectIndex)
def copyIndex(self):
self.savedIndexes = self.columnView.selectionModel().selection().index es()
def selectIndex(self):
self.columnView.selectionModel().select(self.saved Indexes[0], Qt.QItemSelectionModel.SelectCurrent)
if __name__ == "__main__":
app = Qt.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Thanks!