我目前正在开发一个在Qt Designer中设计的小部件.我在尝试向PyQT中的Qtable添加行的语法/整体概念时遇到问题.我还没有找到动态添加行的方法.任何的意见都将会有帮助.
问候
有没有办法可以在qtablewidget中隐藏所选单元格的边框(或使边框颜色为白色).默认情况下会显示带虚线的边框..你可以帮我...
我想将附加数据与插入表中的每个QTableWidgetItem相关联,以便将来在表项上单击时使用该数据.但是这些数据不应该是可见的.我怎样才能做到这一点?
当我在a中选择一行时,我似乎无法保持水平标题被选中QTableWidget.
例:

如何防止标题被选中?只有在表中有一行时才会发生这种情况.如果它有两行以上,那么它按预期工作,只选择行本身.
注意:我已经设定了
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
Run Code Online (Sandbox Code Playgroud)
以便在用户单击单元格时选择整行.
我有以下代码定义我的应用程序的gui
class Ui (object):
def setupUi():
self.tableName = QtGui.QTableWidget(self.layoutWidget_20)
self.tableName.setObjectName(_fromUtf8("twHistoricoDisciplinas"))
self.tableName.setColumnCount(4)
self.tableName.setRowCount(3)
Run Code Online (Sandbox Code Playgroud)
和我的应用程序中的以下代码
class MainWindow(QtGui.QMainWindow):
def __init__(self):
self.ui = Ui()
self.ui.setupUi(self)
self.createtable()
#creating a tw cell
def cell(self,var=""):
item = QtGui.QTableWidgetItem()
item.setText(var)
return item
def createtable(self):
rows = self.tableName.rowCount()
columns = self.tableName.columnCount()
for i in range(rows):
for j in range(columns):
item = self.cell("text")
self.ui.tableName.setItem(i, j, item)
Run Code Online (Sandbox Code Playgroud)
我希望能够添加新的行和列并编辑它们,但我想锁定一些单元格.(我已经有扩展表的代码)如何让一些单元格只读,同时保持其他单元读写?我找到了这个链接如何在QTableWidget中创建一个列只读?有了C++问题的解决方案,python解决方案是否类似?
编辑:从帖子中删除答案并粘贴作为答案
我尝试了多种方法在 QTableWidget 单元格中显示 QIcon,但我不确定为什么它不起作用。我有一个按钮,按下时会在表格中添加一行。这是代码...
void MainWindow::pressed()
{
QTableWidgetItem *item = new QTableWidgetItem("Hello, world!");
QTableWidgetItem *icon_item = new QTableWidgetItem;
QIcon icon("/verified/path/to/icon.png");
icon_item->setIcon(icon);
int row = ui->tableFeed->rowCount();
ui->tableFeed->insertRow(row);
ui->tableFeed->setItem(row, 0, icon_item);
ui->tableFeed->setItem(row, 1, item);
}
Run Code Online (Sandbox Code Playgroud)
它只是不起作用。该单元格中没有显示任何内容。有任何想法吗?
编辑:我设置它的 setItem 调用icon是一个错字。实际代码将其设置为QTabeWidgetItem icon_item. 我在上面的代码中更正了它。
for(int i=0; i<page.size(); i++){
User user= Poco::AnyCast<User>(*it);
ui.table->setItem(i,0,new QTableWidgetItem(user.userName));
ui.table->setItem(i,1,new QTableWidgetItem(user.sex));
ui.table->setItem(i,2,new QTableWidgetItem(user.age));
QPushButton* btn_edit = new QPushButton();
btn_edit = new QPushButton();
btn_edit->setText("Edit");
ui.table->setCellWidget(i,3,(QWidget*)btn_edit);
++it;
}
Run Code Online (Sandbox Code Playgroud)
我使用函数setCellWidget()将QPushButton添加到单元格中,我知道,如果它是QTableWidgetItem,我可以使用:
ui.table->item(0,3)->setTextAlignment(QT::AlignHCenter)
Run Code Online (Sandbox Code Playgroud)
但它是一个小工具,
QTableWidgetItem item = ui.table->item(0,3);
Run Code Online (Sandbox Code Playgroud)
该项为null.
我可以通过使用获得细胞
ui.table->cellWidget(0,3).
Run Code Online (Sandbox Code Playgroud)
如何使按钮在单元格中居中?
我有一个包含主窗口小部件的主窗口,其中设置了垂直布局。向布局添加了一个QTableWidget(暂时)。
当我启动应用程序并在 main_window 上调用 show 时,只显示了其中的一部分QTableWidget。我可以手动扩展窗口以查看所有内容,但我希望窗口的大小能够很好地适应QTableWidget.
谷歌搜索这个问题发现了很多关于如何使用调整大小为任意大小的帖子,并调用resize(int)工作正常,但这并不是我要问的
许多其他帖子不够明确,例如“使用 sizePolicy”或“使用frameGeometry”或“使用几何”或“使用sizeHint”。我相信他们所有人都可能是对的,但是一个关于如何做的例子会很棒。
我想清除我的QTableWidget.
首先,我在qcombobox中选择一个用户,然后单击一个qpushbutton并从数据库记录中填充它; 当我选择其他用户时,我点击qpushbutton添加数据我尝试清除:
self.tableFriends.clear()
Run Code Online (Sandbox Code Playgroud)
数据消失但行仍然存在.
我填写的代码是:
def getFriends(self):
id_us = self.cbUser.itemData(self.cbUser.currentIndex()).toPyObject()
rowIndex = 0
self.tableFriends.clear()
for row in self.SELECT_FRIENDS(id_us):
self.tableFriends.insertRow(rowIndex)
for column in range(0,3):
newItem = QtGui.QTableWidgetItem(str(row[column]).decode('utf-8'))
self.tableFriends.setItem(rowIndex,column,newItem)
rowIndex = rowIndex + 1
Run Code Online (Sandbox Code Playgroud) 我了解如何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)