考虑有一个QTablWidget和一个QTextEdit.它们都是水平的QSplitte.让QTable小部件有2列.
问题是调整表列的宽度,因为您通过使用鼠标移动拆分器来调整操作大小.是否有任何选项可以将colums与表同步调整大小?
谢谢.
代码:
populateTable()
{
tableWidget->clearContents();
tableWidget->setRowCount(stringList.size());
for(int i = 0; i < stringList.size(); ++i)
{
tableWidget->setItem(i, 0, new QTableWidgetItem(stringList.at(i)));
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
第一次运行populateTable(),一切都很好.但接下来的一段时间,它的运行速度明显慢于以前.
讨论:
仔细测试后,我怀疑clearContents()是问题所在.因为只需更改代码
tableWidget->clearContents();
Run Code Online (Sandbox Code Playgroud)
至:
tableWidget->setRowCount(0);
Run Code Online (Sandbox Code Playgroud)
解决问题,但现在又出现了另一个问题; 将行计数设置为'0'似乎不会删除堆分配的QTableWidgetItems,它似乎只是保留了项目的所有权,因此它会留下内存泄漏.(或者至少我只是这么认为......)
Qt在QTableWidget中的文档相当模糊,所以我并不确切知道clearContents()实际上做了什么.在文档中,它说"从视图中删除不在标题中的所有项目",这样我就会问,表中的内容是否只是隐藏?它会被删除吗?我不太确定.我的理论是clearContents()只隐藏项目,任何下一次填充表的尝试实际上删除并删除每个项目然后分配一个新的项目来设置在表格上,这反过来又是一项昂贵的操作.
另一件有趣的事情是Qt关于QTableWidget的文档表明填充QTableWidget的正确方法是在堆上分配一个QTableWidgetItem,然后将其设置在一个带有setItem()的表格单元格上,就像我在上面的代码中看到的那样,我发现它是奇怪...
综上所述:
是否有另一种方法来填充和重新填充Qt表而没有所有这些问题?如果没有,有没有办法解决这些问题?
我有使用qt设计器制作的自定义小部件,我想将它添加到QTableWidget单元格.但它不起作用.
这是代码:
int nRows =10;
for(int row = 0; row < nRows;row++;)
{
QTableWidgetItem* item = new QTableWidgetItem();
CustomWdg* wdg=new CustomWdg( );
mTableWdg->insertRow( row );
mTableWdg->setItem(row, 0, item);
mTableWdg->setCellWidget( row, 0, wdg );
}
Run Code Online (Sandbox Code Playgroud) 无论如何让QTableWidget的标题项目像QTreeWidget一样伸展到完整大小?
我有一个QTableWidget,我将此表中的数据导出到csv文件.但现在,我想打开一个现有的csv文件并用这些数据填充我的表.我该怎么做??这是我的导出代码,我想要一个"填充"代码,我真的不知道该怎么做..我知道如何阅读csv但我不知道如何用这个csv数据填充我的表.
def export(self):
def export(self):
nomeArquivo = "nomeArquivo"
filename = unicode(QFileDialog.getSaveFileName(self, "Document - Choose Export File", nomeArquivo+".csv"))
if not filename:
return
self.model.sort()
fh = None
try:
fh = QFile(filename)
if not fh.open(QIODevice.WriteOnly):
raise IOError, unicode(fh.errorString())
stream = QTextStream(fh)
stream.setCodec("UTF-8")
for row in range(self.model.rowCount()):
TSentence = self.model.data(
self.model.index(row, TABELA.SENTENCE)).toString()
TIrony = self.model.data(
self.model.index(row, TABELA.IRONY)).toString()
stream << "\""<< TSentence << "\"" << ";" << "\""<< TIrony <<"\"" <<"\n"
except (IOError, OSError), e:
QMessageBox.warning(self, "Text - Error",
"Failed to export: %s" % e) …Run Code Online (Sandbox Code Playgroud) 我使用 UI 编辑器创建了一个 QTableWidget。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
populateFilesTable();
connect(ui->browseButton, SIGNAL(clicked()), this, SLOT(selectDirectory()));
connect(ui->searchButton, SIGNAL(clicked()), this, SLOT(findFiles()));
}
Run Code Online (Sandbox Code Playgroud)
这显示了 UI 是如何设置的,然后我调用了函数populateFilesTable()。
功能如下:
void MainWindow::populateFilesTable()
{
ui->filesTable->setSelectionBehavior(QAbstractItemView::SelectRows);
QStringList labels;
labels << tr("Filename") << tr("Size");
ui->filesTable->setHorizontalHeaderLabels(labels);
ui->filesTable->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch);
ui->filesTable->verticalHeader()->hide();
ui->filesTable->setShowGrid(true);
}
Run Code Online (Sandbox Code Playgroud)
标题没有显示在桌子上,有什么想法吗?谢谢。
我有一个 QTableWidget,我通过标题列使用它的默认排序功能,但 QTableWidget 中的一列是整数类型,并且通过 QTableWidget 默认排序,它像字符串一样排序。所以有任何方法可以使用我自己的方法QTableWidget 的排序功能?
在 PyQt 中,如何强制 aQTableWidget仅接受单个部分(以便您无法使用Shift或选择更多项目crtl)?
当我单击右侧的“Çiz”按钮时,我想使用 python 代码对特定列中的值进行排序。但是,如果数字是双倍或更多,它会根据第一个元素进行排序。我意识到它接受字符串形式的值。我在网站上看了很多问题,没有答案。不想写脚本,排序肯定有办法,因为看起来好简单。
这是我从 Qt 5.10 开始的脚本,这里。
这是我的脚本 - 我写了 0 用于根据第一列进行排序:
QTableWidget.sortItems(0, QtCore.Qt.AscendingOrder)
Run Code Online (Sandbox Code Playgroud)
但它接受值作为字符串而不是数字值。实际上,当用户单击标题时有一个脚本对值进行排序,但我不想让用户单击标题:
QTableWidget.setSortingEnabled(True)
Run Code Online (Sandbox Code Playgroud) 我需要一个QTableWidget基于 aQTabelModel并QTableView在表格上方添加一些按钮。见下图:
QTableWidget应调整的宽度,使其不小于合理的最小值,并且不会超出其上方的按钮;特别是,第 1、2、4 列的大小应根据其内容进行调整,第 3 列Aberrations应扩大以填补右侧的空白。我想知道如何在代码中做到这一点。
以下是我用于自定义QTableWidget(PyQt5、Python3)的代码的最小示例:
from PyQt5 import QtGui, QtCore, QtWidgets
import numpy as np
#-- Table Model
class MyTableModel(QtCore.QAbstractTableModel):
def __init__(self, data, parent=None, *args):
super(MyTableModel, self).__init__(parent)
# table data
self.table_data = data
self.rows_nr, self.columns_nr = data.shape
# vertical & horizontal header labels
self.hheaders = ["Head-{}".format(i) for i in range(self.columns_nr)]
self.vheaders = ["Row-{}".format(i) for i in range(self.rows_nr)]
# nr of rows
def rowCount(self, parent):
return self.rows_nr …Run Code Online (Sandbox Code Playgroud)