c++ - 从 QListWidget 和 QTableWidget 获取点击的项目
问题描述
当用户点击它们时,我需要从 QTableWidged 和 Q ListWidget 中读取一个项目。
对于 QListWidget 我尝试了此处描述的解决方案,但是使用的SIGNAL itemClicked
似乎从未触发。
对于 QTableWidget,我尝试了多种解决方案,但是它们要么不起作用,要么不是我需要的。QTableWidget 是否有一个简单的解决方案,我是否忽略了为 QListWidget 提供的解决方案?
编辑:
我的 MainWindow.cpp 构造函数如下所示:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->TableWidget->verticalHeader()->setVisible(true);
QTableWidget* table = ui->TableWidget;
connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(showBuchungsDetails(parseListWidgetBuchung(QListWidgetItem*))));
QHeaderView *header = qobject_cast<QTableView *>(table)->horizontalHeader();
connect(header, &QHeaderView::sectionClicked, [this](int logicalIndex){
QString text = ui->TableWidget->horizontalHeaderItem(logicalIndex)->text();
ui->lnBuchungsnummer->setText(text);
});
}
这是我的 MainWindow 头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
#include <QFileDialog>
#include <QListWidget>
#include "TravelAgency.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_actionDatei_einlesen_triggered();
void on_actionProgramm_beenden_triggered();
void on_actionBuchungen_anzeigen_triggered();
Customer* parseListWidgetBuchung(QListWidgetItem* item);
Customer* parseTableWidgetBuchung(QString item);
void showBuchungsDetails(Customer* c);
private:
Ui::MainWindow *ui;
TravelAgency travelagency{};
bool inputReady = false;
QStringList m_TableHeader;
};
#endif // MAINWINDOW_H
编辑 2:我正在使用 Qt Creator 4.8.2
解决方案
不要对 C++ 信号和槽使用SLOT
/SIGNAL
语法。这很容易出错,因为这样的错误在编译期间不会被捕获。您的代码编译得很好,但不起作用。
使用 Qt5 连接语法。在这种情况下,您可以使用 lambda:
connect(ui->listWidget, &QListWidget::itemClicked, this, [this](QListWidgetItem* item)
{
showBuchungsDetails(parseListWidgetBuchung(item));
});
推荐阅读
- python - 比较第一条记录的记录 - Python
- html - 同时设置标题、字体大小和颜色
- python-3.x - 我可以使用 pipenv 创建两个虚拟环境,每个环境都有不同的 python 版本(即 3.7 和 3.6)吗?
- r - 如何总计几列到某个点?
- node.js - node js app.use 抛出一个中间件函数
- java - 在两个线程中交替打印字符串
- python - SyntaxError:yt 模块的语法无效
- r - 将线性回归与对数线性回归与 R 进行比较
- c# - C#/PHP 如何构建不能被滥用的 API
- python - Mathematica 的 NDSolve 和 SciPy 的 solve_ivp 返回不同的结果