gpt4 book ai didi

c++ - 对特定表单小部件实现 shift-click 修饰符?

转载 作者:行者123 更新时间:2023-11-27 23:59:30 25 4
gpt4 key购买 nike

如果我将 Qt Designer 用于我的应用程序的主窗口——并且该应用程序内部包含许多不同的小部件——我该如何进一步具体地自定义这些小部件?例如,我有一个 QTableView我的主应用程序中的小部件。在调试应用程序时,ui_myapplication.h文件从 Qt Designer 创建 .ui形式。假设我想向该文件中定义的小部件添加一些额外的东西。如果它是在运行时创建的,我该怎么办?

例子:

myApplication.cpp ,我有这段代码:

void myApplication::mousePressEvent(QMouseEvent* event) {
if(event->modifiers() & Qt::ShiftModifier) {
if(event->button() == Qt::LeftButton) {
qDebug() << "shift modifier";
ui->tableView->setSortingEnabled(false);
}
}
}

这与我想要的相似,但不完全相同。这个想法是让 QTableView名为 tableView 的小部件(它包含在我在 Qt Designer 中创建的主应用程序中)以在我按住 Shift 时禁用表格的排序功能。并左键单击列标题。 (最终目标是让 Shift+click 会在短时间内禁用列排序,这样我就可以选择列中的所有项目,而不是让它对列进行排序)。

只有当我按住 Shift 键并单击主应用程序的最底部(在没有其他小部件的空间)时,上面的代码才会起作用。这就说得通了。但是我该怎么做才能在 tableView 中按住 Shift 并单击小部件将触发 qDebug() << "shift modifier";行?

我想要类似这样的东西:(伪代码):

void myApplication::mousePressEvent(QMouseEvent* event) {
if(target == ui->tableView->horizontalheader() && event->modifiers() & Qt::ShiftModifier) {
if(event->button() == Qt::LeftButton) {
qDebug() << "shift modifier";
ui->tableView->setSortingEnabled(false);
}
}
}

我该怎么做?

编辑:研究让我相信我可以使用可以针对特定小部件的事件过滤器来做到这一点。我走在正确的轨道上吗?

编辑 2:感谢 goug 在下面的回答,我能够通过子类化 QTableView 来完成我需要的事情然后提升我现有表格的 QTableView到新类(class)。见下文:

mytableview.h

#ifndef MYTABLEVIEW_H
#define MYTABLEVIEW_H

#include "mytableview.h"
#include <QTableView>

class MyTableView : public QTableView
{
Q_OBJECT

public:
explicit MyTableView(QWidget * parent = 0);

~MyTableView();

protected:
void mousePressEvent(QMouseEvent *event);

};

#endif // MYTABLEVIEW_H

mytableview.cpp

#include "mytableview.h"
#include <QDebug>

MyTableView::MyTableView(QWidget* parent)
{
}

MyTableView::~MyTableView()
{
}

void MyTableView::mousePressEvent(QMouseEvent* event) {
if(event->modifiers() & Qt::ShiftModifier) {
if(event->button() == Qt::LeftButton) {
qDebug() << "shift modifier";
setSortingEnabled(false);
}
}
}

最佳答案

您可以在此处使用多种不同的方法。您可以子类化 QTableView,然后在 Qt Designer 中,您像往常一样放置一个 QTableView,然后将其提升到您的派生类。生成的代码创建您的类的实例而不是 QTableView。在 Qt Designer 中,右键单击 TableView 并从 Promote 选项中进行选择。您必须在第一次输入您的类(class)详细信息。我倾向于走这条路,尤其是当您想要在表格 View 上实现其他自定义行为时。

另一种选择是创建一个新类并将其作为事件过滤器安装在您的 QTableView 上。然后,您的新类(class)会在事件进入 QTableView 之前获取事件,您可以对它们采取相应的行动。在 Qt Assistant 中查找 installEventFilter,它会让您了解如何执行此操作的详细信息。

关于c++ - 对特定表单小部件实现 shift-click 修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40250957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com