- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经创建了一个 QTableWidget。一些单元格填充有单元格小部件(修改后的 QLabel,发送点击信号)。现在,我想对点击这个标签使用react。我添加了一些调试功能。
单击空单元格会将正确的行和列写入控制台。单击标签被识别为单击,但行和列错误(使用之前的单元格数据)。
问题:如何获得点击标签的正确行和列。
问候和感谢,迈克尔
MtTimeTable::MtTimeTable( QWidget* parent )
: QTableWidget { parent }, mIdArray { MtIdArray() },
mDate { QDate::currentDate() }
{
this->fillLesssonWidgets();
connect( this, &MtTimeTable::cellClicked,
this, &MtTimeTable::slotCellActivated );
}
void MtTimeTable::fillLessonWidgets()
{
MtLessonVec lessonVec { true }; // Data to show, loaded from file
auto cit { lessonVec.begin() };
while( cit != lessonVec.end() ) {
// Class MtLessonWidget derived from QLabel
MtLessonWidget* lessonWidget { new MtLessonWidget };
lessonWidget->setLesson( *cit );
// Using member functions of MtLessonwidget, working correct
this->setCellWidget( lessonWidget->startingRow(),
lessonWidget->startingCol(),
lessonWidget );
}
connect( lessonWidget, &MtLessonWidget::sigClicked,
this, &MtTimeTable::slotLessonWidgetClicked );
++cit;
}
}
我试图将代码减少到最少。
void MtTimeTable::slotLessonWidgetClicked()
{
std::cerr << "Table Cell: [" << this->currentRow() << ","
<< this->currentColumn() << "]" << std::endl;
}
最佳答案
根据docs :
int QTableWidget::currentColumn() const
Returns the column of the current item.
int QTableWidget::currentRow() const
Returns the row of the current item.
也就是item的位置,它指的是一个QTableWidgetItem,但是如果我们用setCellWidget没有创建一个item,所以那些位置不合适,我们必须寻找其他方法来获取行和与小部件关联的列。
一种方法是使用 indexAt()
返回与单元格关联的 QModelIndex
的方法,给定它相对于 QTableWidget
的 viewport()
的位置,而这应该是使用:
void MtTimeTable::slotLessonWidgetClicked(){
auto lbl = qobject_cast<MtLessonWidget *>(sender());
if(lbl){
auto ix = indexAt(lbl->pos());
qDebug()<<"Table Cell: [" <<ix.row()<< "," <<ix.column()<< "]";
}
}
完整示例:
#include <QApplication>
#include <QLabel>
#include <QTableWidget>
#include <QDebug>
class CustomLabel: public QLabel{
Q_OBJECT
protected:
void mousePressEvent(QMouseEvent *){
emit clicked();
}
signals:
void clicked();
};
class TableWidget: public QTableWidget{
Q_OBJECT
public:
TableWidget(QWidget* parent=Q_NULLPTR):QTableWidget(parent){
setRowCount(10);
setColumnCount(10);
for(int i=0; i<rowCount(); i++){
for(int j=0; j<columnCount(); j++){
auto lbl = new CustomLabel;
setCellWidget(i, j, lbl);
connect(lbl, &CustomLabel::clicked, this, &TableWidget::onClicked);
}
}
}
private slots:
void onClicked(){
auto lbl = qobject_cast<CustomLabel *>(sender());
if(lbl){
auto ix = indexAt(lbl->pos());
qDebug()<<"Table Cell: [" <<ix.row()<< "," <<ix.column()<< "]";
}
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TableWidget w;
w.show();
return a.exec();
}
在下面的链接中,我展示了完整的 example .
关于c++ - QTableWidget、Cellwidget、QLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47984647/
有谁知道的返回值之间的关系 QTableWidget::item(x, y) 和 QTableWidget::cellWidget (x, y) 在同一个 QTableWidget 和同一个 row
当我将按钮拖放到 QTableWidget 中时,按钮会从旧位置消失,并且我放置按钮的单元格中不会显示任何内容。 有人可以提出问题是什么吗? 请在下面找到代码 import sys from PyQt
我有一个 QTableWidget,我想在其中填充另一个 QTableWidget 的字段。 这是它的样子: -------------------------- Name | Class | Sec
我问了一个与此非常相似的问题,但回答者提供了少量帮助,我无法解决我的问题。我想我会重新问这个问题,因为没有其他人回答我的问题。我想知道如何将 QTableWidget 的数据从一个窗口复制到另一个窗口
我的程序遇到了一个问题,我不知道如何解决。问题是我在两个类中有一个Qtablewidget,我使用信号和槽机制来传输一个QVector,它包含一个类的QTablewidgetItems,并将它放在其他
我有一个问题:调用 QTableWidget::update 不会导致 QTableWidget::paintEvent。 简要说明:- QTableWidgetEx - 派生自 QTableWidg
我正在使用 QTableWidget,当用户单击特定行时,我使用该索引来执行某些操作。我还使用 setSortEnable 启用了排序,所以当我通过单击标题对其进行排序时,所有行索引都会更改,但我想要
假设我有一个充满数据的二维数组,比如 10 x 10。内容以及行数可以随时更改。 现在我想在 QTableWidget 中显示这些数据。 我使用超时 1 秒的计时器来刷新表格内容。在超时槽中,如果我使
QTableWidget 有搜索用户数据行的方法吗? 类似的东西: //set user data row->setData(0, Qt::UserRole, "ID001"); //find row
我使用 UI 编辑器创建 QTableWidget。 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:
QTableWdiget对于简单的网格显示来说非常棒。更改颜色、字体等非常简单。 但是,我没有设法用更少的垂直空白来使网格看起来更“紧密”。我看到 Qt 文档讨论了(例如 here ) margin
可以为单元格设置占位符吗?我认为它可以通过为特定单元格设置 QLineEdit 来实现,但可能是 QTableWidget,或者 QTableWidgetItem 可以在没有自定义小部件的情况下做到这
当按下堆叠在左侧的按钮选择了 QTableWidget 中的整行时,是否有信号?我希望启用某些功能,但不确定如何启用? 提前致谢! 最佳答案 您有几个不同的选择。您所要求的最直接的方法是使用 QHea
在下面的代码中有两个样式表:problemStylesheet 和 okStylesheet。当我为 QTableWidget 使用 okStylesheet 时一切正常。标签在滚动。问题是如果我使用
QTableWidget由多个Selection Modi组成,可以通过方法进行选择 setSelectionMode (QAbstractItemView::SelectionMode mode)
我正在尝试使用最新的 Qt SDK (4.7.4) 来设置 QTableWidget 的样式。通过谷歌搜索,我发现我需要做这样的事情: QHeaderView::section { backg
我有一个 QTableWidget,我通过标题列使用它的默认排序功能,但我在 QTableWidget 中的一列是整数类型,并且通过 QTableWidget 默认排序它像字符串一样排序。所以有任何方
我有一个带有自定义小部件的 QTableWidget。这些小部件很大,几乎填满了整个滚动区域的高度,因此只有一行是可见的。 我可以用鼠标滚轮或拖动滚动条滚动,但行总是跳动。 有没有办法让QTableW
我尝试了 .setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) ,效果很好,但需要用户将鼠标移动到滚动条并使用它来体验平
我有一个带有自定义小部件的 QTableWidget。这些小部件很大,几乎填满了整个滚动区域的高度,因此只有一行是可见的。 我可以用鼠标滚轮或拖动滚动条滚动,但行总是跳动。 有没有办法让QTableW
我是一名优秀的程序员,十分优秀!