从qlistwidget和qtableWidget获得单击项目
Get clicked item from QListWidget and 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创建者4.8.2
不要将SLOT
/SIGNAL
语法用于C 信号和插槽。这很容易发生,因为在汇编过程中不会捕获此类错误。您的代码编译良好但不起作用。
使用QT5连接语法。在这种情况下,您可以使用lambda:
connect(ui->listWidget, &QListWidget::itemClicked, this, [this](QListWidgetItem* item)
{
showBuchungsDetails(parseListWidgetBuchung(item));
});
connect
调用是错误的。如果使用信号 - 插槽语法,则插槽必须是一个函数(这是对函数的"引用"(。
您可以做这样的事情:
connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(onItemClicked(QListWidgetItem*)));
和onItemClicked
实现:
void MainWindow::onItemClicked(QListWidgetItem* item)
{
showBuchungsDetails(parseListWidgetBuchung(item));
}
感谢您的建议,但是我通过在我的UI窗口上右键右键访问了" Connect"语法,并使用"转到插槽" ...创建
void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
parseListWidgetBuchung(item);
}
void MainWindow::on_TableWidget_cellClicked(int row, int column)
{
parseTableWidgetBuchung(ui->TableWidget->item(row, 0)->text());
}
,这使我能够获取各个项目。无论哪种方式,再次感谢您的帮助!
相关文章:
- QTreeView幻灯片多选后无法使用单击选择
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- QML TableView 使用 QtQuick.Controls 2 单击行
- ImGui 在单击按钮后冻结
- 有没有办法区分Qt小部件是通过鼠标单击还是通过按表键获得焦点?
- 我想使用此代码单击某个特定窗口,但它无法正常工作
- 如何确定网格视图中单击的项目
- 如何通过 CTRL+单击在 QTableWidget 中禁用多个项目选择
- 从qlistwidget和qtableWidget获得单击项目
- QListWidget 项目单击和项目双击 - 如果双击,则阻止单击
- 将项目插入桌面右键单击菜单从外壳扩展
- 如果我单击对话框中的项目(ListBox、CheckBox等),OnLButtonDown()不会被激发,但如果我单击背
- Visual Studio 2015 Community C++ 新建项目窗口在单击“确定”后消失
- 鼠标按下QComboBox的插槽-如果用户单击组合框,则动态填充项目
- 如何使“QTableWidget”项目仅在单击第一列时才被选中
- Qt -事件监听器的树小部件项目单击
- 如何通过鼠标单击在QGraphicsView中选择位置并添加项目
- 当我在win32项目c++应用程序中单击菜单项时,如何编写代码来加载一个特殊的对话框?
- QListWidget:项目单击上的事件
- 右键单击QTreeView项目