我怎么会去使用setHorizontalHeaderLabels我的财产tableWidget而不是数字来指定我的专栏的名字呢?我想将我的行保存为数字,但是将我的列更改为我收集到QList中的名称.
现在,我将行和列的值设置为整数.当我尝试使用setHorizontalHeaderLabels时,似乎列的整数值会覆盖我试图指定的列名,我不知道如何修复它.
这就是我设置当前值的方式,它只涉及行和列的整数值:
QList< QStringList > columnHeaderList;
//--- create the horizontal (column) headers
QStringList horzHeaders;
ui->tableWidget_inputPreview->setHorizontalHeaderLabels( horzHeaders );
horzHeaders << "test1" << "test2" << "test3";
ui->tableWidget_inputPreview->setRowCount( rowList.size() - 1 );
ui->tableWidget_inputPreview->setColumnCount( columnHeaderList[0].size() );
for ( int row = 0; row < rowList.size(); ++row ) {
for ( int column = 0; column < rowList[row].size(); ++column ) {
ui->tableWidget_inputPreview->setItem(row, column, new QTableWidgetItem(rowList[row][column]));
}
}
Run Code Online (Sandbox Code Playgroud)
我需要一些指导如何正确地从我的QList中获取值并将列设置为我的tableWidget的值.我的tableWidget中出现的列是1,2,3,4,5,6,7,它们来自在 …
我正在使用PyQt开发GUI.GUI有一个qListWidget,一个qTableWidget和一个用Mayavi实现的图.列表指的是绘制的形状(例如圆柱和圆锥).当在列表中选择一个形状时,我希望将形状的属性加载到表中(从字典变量中)和要在图中突出显示的形状.我有Mayavi密谋工作正常.此外,如果编辑了表格,我需要重新绘制形状,以反映新的属性值(如圆柱体,如果半径已更改).
因此,当选择列表项时 - >使用项的属性(从字典变量)更新表,突出显示项目上的项目
编辑表时 - >更新字典变量并重新绘制项目
问题:当我选择一个列表项并将数据加载到表中时,每次更新单元格时都会触发qTableWidget ItemChanged信号,这会触发不完整数据重新绘制形状的次数.
在以编程方式更新表时,是否存在禁用GUI事件循环的典型方法?(我有使用Excel VBA的经验,在该上下文中设置Application.EnableEvents = False将阻止每次以编程方式更新单元格时触发WorksheetChange事件.)我是否应该有一个"表更新进行中"变量以防止在执行操作时采取操作表正在更新?有没有办法一次更新Table Widget而不是逐项更新?(我承认我现在故意避开模型 - 视图框架,因此qListWIdget和qTableWidget).
有什么建议?
我是第一次发布海报,但却是StackOverflow的长期用户,所以我只是想提前感谢这样一个非常棒的社区!
我有一个主窗口与在QToolBar,QWidget的和QTabWidget.布局是"网格".但是,我的窗口可以调整大小,因为我有一个布局,它运行良好.但是有一个问题,在我的QTabWidget中我有一个带有两列的QTableWidget(布局也是"Grid").如果我调整整个窗口的大小,QTableWidget会调整大小,但不会调整列.
例如,每当我调整窗口大小时,我的QTabWidget也会调整其大小和QTableWidget.只有我的QTableWidget中的列不会.
那么......如果我的QTableWidget调整大小,我怎么能调整它们的大小呢?
所以,我在 PyQt 中使用 Python 并且我有一个 QTableWidget。我想要做的是在某个时候取消选择 QTableWidget 中的所有内容。有没有一种简单的方法可以做到这一点?我的意思是,有一个 select_all 选项,但我找不到任何可以取消全选的东西...
我想强调鼠标悬停在我的行上QTableWidget.
当我悬停鼠标时,只突出显示单个单元格.
我试过这种方法:
bool MyTabWidget::eventFilter(QObject *target, QEvent *event)
{
if( target == ui->MyTableWidget )
{
//Just to print the event type
qDebug() <<"EventType : "<<event->type();
}
}
Run Code Online (Sandbox Code Playgroud)
输出: EventType : 13.
`(13 = QEvent::Move)`
Run Code Online (Sandbox Code Playgroud)
我已经迷失了谷歌搜索.但没有得到任何适当的解决方案
有没有其他方法来满足我的要求(突出显示鼠标悬停的整行)?
请帮忙.预先感谢.
编辑:
请参考下面的屏幕截图更清晰.

这是我QTableWidget
想要在鼠标悬停时更改红色边框(已编辑)行的背景颜色.
我了解如何QTableWidget通过观察信号来检测单元格中的点击cellClicked(int row, int column)(下面的代码)。
我想对水平标题的单元格执行相同的操作,并获取单击的标题单元格的文本。我怎么做?
// mainwindow.h
class MainWindow : public QMainWindow {
Q_OBJECT
QWidget widget;
QVBoxLayout vLayout {&widget};
QStringList headers {"asdca", "asdcad", "asdcadca"};
QTableWidget table {5, headers.size()};
public:
MainWindow(QWidget *parent = 0);
~MainWindow() {}
};
// mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
setCentralWidget(&widget);
vLayout.addWidget(&table);
table.setHorizontalHeaderLabels(headers);
connect(&table, &QTableWidget::clicked, []{
qDebug() << "click!!" ;
});
}
Run Code Online (Sandbox Code Playgroud) 我在对话框中有一个带有两列标题的表格小部件,如下所示:
名为“索引”和“标签”的列标题之间存在分隔,但这些标题与其下方的行之间没有分隔边界。这个怎么加?
假设表被实例化为:
table = QTableWidget(6, 2, self)
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过headerItem = table.horizontalHeaderItem(0)修改一些属性并将其设置回第一个水平标题作为 QTableWidgetItem ,但我不确定要设置哪些属性或者是否有更直接的方法。
如果我提取标题并通过以下方式设置其底层框架的样式、阴影和线宽属性:
header = table.horizontalHeader()
header.setFrameStyle(QFrame.Box | QFrame.Plain)
header.setLineWidth(1)
table.setHorizontalHeader(header)
Run Code Online (Sandbox Code Playgroud)
我最终得到了如下所示的内容:
这样,标题周围就会出现边框。这可以单独为每个标题项目完成,但有几个问题:
有没有更“内置”的方式来做到这一点?
我想删除QPushButton点击的行如何可能我认为使用插槽是合理的但如何做到这一点不知道,如果您有任何想法如何获取一行选定的按钮请分享,谢谢。
这是我的桌子

这是我向 QTableWidget 添加行的代码
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
for(int i = 0; i<20;i++)
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
QVector<QString>vec;
vec<<"first"<<"sec"<<"third"<<"for"<<"fif"<<"first"<<"sec"
<<"third"<<"for"<<"fif";
vec<<"first"<<"sec"<<"third"<<"for"<<"fif"<<"first"<<"sec"
<<"third"<<"for"<<"fif";
for(int i = 0; i<ui->tableWidget->rowCount();i++)
{
for(int j = 0; j<ui->tableWidget->columnCount();j++)
{
if(j == 0)
{
QWidget* pWidget = new QWidget();
QPushButton* btn_edit = new QPushButton();
btn_edit->setText("Remove");
QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
pLayout->addWidget(btn_edit);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0, 0, 0, 0);
pWidget->setLayout(pLayout);
ui->tableWidget->setCellWidget(i, j, pWidget);
continue;
}
QTableWidgetItem*item = new QTableWidgetItem(vec[i]);
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
ui->tableWidget->setItem(i, j, item); …Run Code Online (Sandbox Code Playgroud) 有没有办法将QCheckBox单元格小部件放置在单元格QTableWidget的中心,而不是在左侧,而不需要额外的QWidget并将复选框添加到它的布局中?
我想改变 a 的颜色QTableWidget。我几乎得到了我喜欢的结果,但垂直标题中的两个区域仍然是白色的:
在写这篇文章之前,我实际上还设法对左上角进行着色,但没有对其他区域进行着色。这是我正在使用的样式表:
QTableCornerButton::section {
background-color: #8b8d8e;
}
QHeaderView::section {
color: white;
background-color: #747678;
gridline-color: #747678;
}
Run Code Online (Sandbox Code Playgroud)