我是Qt编程的新手.我正在尝试创建一个可以通过单击按钮添加行的简单表.我可以很好地实现表,但似乎无法获得更新的数据显示在表上.我相信我的问题源于这样一个事实:我似乎无法使用按钮正确调用任何类型的"更改数据"方法.我已经尝试了几种不同的在线解决方案,所有这些都导致了4年前的死胡同.到目前为止我所拥有的是基本结构,我无法弄清楚如何使用新数据更新表.
这是基本观点

我已经设置了一些测试数据.
在最后的实现中,表将从空开始,我想追加行并将它们显示在表视图中.
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MyWindow(QWidget):
def __init__(self):
QWidget.__init__(self)
# create table
self.get_table_data()
self.table = self.createTable()
# layout
self.layout = QVBoxLayout()
self.testButton = QPushButton("test")
self.connect(self.testButton, SIGNAL("released()"), self.test)
self.layout.addWidget(self.testButton)
self.layout.addWidget(self.table)
self.setLayout(self.layout)
def get_table_data(self):
self.tabledata = [[1234567890,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20]]
def createTable(self):
# create the view
tv = QTableView()
# set the table model
header = ['col_0', 'col_1', 'col_2', 'col_3', 'col_4']
tablemodel = MyTableModel(self.tabledata, header, self)
tv.setModel(tablemodel)
# set the minimum size …Run Code Online (Sandbox Code Playgroud) 我有一个QTableView,我想在编辑模式下显示最后一列.(这是一个QComboBox,用户应该能够始终更改值.)
我想我已经在Qt文档中看到了解决方案,但我再也找不到了.有一个简单的方法吗?
我想我可以通过使用openPersistentEditor()每个单元格来存档这种效果,但我正在寻找更好的方法.(比如只为整列指定一次.)
有没有办法确定QTableView当前单元格中是否有一个打开的编辑器?我需要处理以下情况:
我看到如何获取当前项目,并可以获得该项目的委托,但我没有看到任何isEditMode()我希望找到的属性.
有人能指出我正确的方向吗?
从这个屏幕截图中,您可以看到行内的大量空间:

我已经使用这些函数来调整大小:
resizeRowsToContents();
resizeColumnsToContents();
Run Code Online (Sandbox Code Playgroud)
如何才能更好地适应细胞/行大小?
我创建了一个表QTableView和一个QStandardItem小部件.如何从中删除垂直标题QStandardItemModel?
实际上我是Qt的新手并且无法QMouseEvent与之匹敌QTableview
请帮助解决这个问题.
我有一个窗口,其中包含QTableView哪些列调整为内容并固定宽度.所述QTableView嵌套内的QWidget,反过来嵌套内的QScrollArea是,在又一个嵌套内的选项卡式 QMdiArea这是centralWidget的QMainWindow.
当QScrollArea所示,QTableView有额外的空间,我想除去最后一列的权利:

我希望QTableView拟合列的确切宽度(即最右边的列后没有额外的空格).
我尝试使用tableView.setFixedWidth(desired_width)但是它唯一可行的方法是迭代所有列并获得它们的宽度并将它们加在一起并添加verticalHeader宽度和滚动条宽度并将其作为传递desired_width.
它确实以这种方式工作,但对于这样一个明显的要求似乎非常复杂:我认为许多程序开发人员希望他们的表的宽度适合列的宽度,这就是让我想知道可能有一种方法在没有额外计算的情况下自动完成并且我不知道.
所以我的问题是:有没有更简单的方法来实现相同的结果?
这是我的代码供参考:
t_main负责创建的模块的代码QMainWindow:
import sys
import t_wdw
from PySide import QtGui
class Main_Window(QtGui.QMainWindow):
def __init__(self):
super(Main_Window,self).__init__()
self.initUI()
def initUI(self):
self.statusBar()
# Defines QActions for menu
self.new_window=QtGui.QAction("&Window alpha",self)
self.new_window.triggered.connect(self.open_window)
# Creates the menu
self.menu_bar=self.menuBar()
self.menu1=self.menu_bar.addMenu('&Menu 1')
self.menu1.addAction(self.new_window)
# Creates a QMdiArea to …Run Code Online (Sandbox Code Playgroud) 我有一个QTableView,它有一个带有QComboBox QItemDelegate的列.有一个组合框的完成列表.当您开始输入并按Enter键时,完成正确完成(请注意大写字母)
(按回车) - > 
但是,当我按Tab键时,它不会包含大写字母.
(按标签) - > 
但是当我在一个免费的ComboBox上尝试这个时,它会正确地自动完成
(按标签) - > 
我没有在任何地方捕获Tab输入事件,所以我不确定是什么导致了这个问题.会是什么呢?
void MyWindow::initializeModelBySQL(QSqlQueryModel *model,QTableView *table,QString sql){
model = new QSqlQueryModel(this);
model->setQuery(sql);
}
Run Code Online (Sandbox Code Playgroud)
使用此方法,我可以将QSQlQueryModels设置为我的QTableviews.
但是如何根据单元格值将颜色设置为一行?
以下是我目前正在尝试的内容.标题文本正确更改颜色,但背景不会更改默认值.
template<typename T>
inline QVariant TableModel<T>::headerData(int section, Qt::Orientation orientation, int role) const
{
//...
else if(role == Qt::BackgroundRole) {
return QBrush(m_display.headerBackground);
}
//...
}
Run Code Online (Sandbox Code Playgroud)
如何设置背景颜色?