C++ 对特定表单小部件实现shift-click修改器?
如果我在应用程序的主窗口中使用Qt Designer,并且应用程序中包含许多不同的小部件,那么如何进一步定制这些小部件?例如,我的主应用程序中有一个QTableView小部件。调试应用程序后,将从Qt Designer.ui表单创建一个ui_myapplication.h文件。假设我想向该文件中定义的小部件添加一些额外的东西。如果它是在运行时创建的,我会怎么做 例如: 在myApplication.cpp中,我有以下代码块:C++ 对特定表单小部件实现shift-click修改器?,c++,qt,C++,Qt,如果我在应用程序的主窗口中使用Qt Designer,并且应用程序中包含许多不同的小部件,那么如何进一步定制这些小部件?例如,我的主应用程序中有一个QTableView小部件。调试应用程序后,将从Qt Designer.ui表单创建一个ui_myapplication.h文件。假设我想向该文件中定义的小部件添加一些额外的东西。如果它是在运行时创建的,我会怎么做 例如: 在myApplication.cpp中,我有以下代码块: void myApplication::mousePressEvent
void myApplication::mousePressEvent(QMouseEvent* event) {
if(event->modifiers() & Qt::ShiftModifier) {
if(event->button() == Qt::LeftButton) {
qDebug() << "shift modifier";
ui->tableView->setSortingEnabled(false);
}
}
}
我该怎么做
编辑:研究让我相信我可以用一个事件过滤器来实现这一点,它可以针对特定的小部件。我走对了吗
编辑2:多亏了goug下面的回答,我能够通过子类化QTableView并将现有表单的QTableView升级到新类来完成我所需要的。见下文:
mytableview.h
mytableview.cpp
这里有几种不同的方法可以使用。您可以将QTableView子类化,然后在Qt设计器中,将QTableView作为普通类放置,然后将其升级到派生类。生成的代码创建类的实例,而不是QTableView。在Qt Designer中,右键单击表视图并从升级选项中选择。您必须在第一次输入您的课堂详细信息。我倾向于走这条路,尤其是如果您希望在表视图上实现其他自定义行为
另一个选项是创建一个新类,并将其作为事件过滤器安装在QTableView上。然后,您的新类在事件进入QTableView之前获取事件,您可以对它们采取相应的行动。在Qt Assistant中查找installEventFilter,这将使您了解如何执行此操作的详细信息 这里有几种不同的方法可以使用。您可以将QTableView子类化,然后在Qt设计器中,将QTableView作为普通类放置,然后将其升级到派生类。生成的代码创建类的实例,而不是QTableView。在Qt Designer中,右键单击表视图并从升级选项中选择。您必须在第一次输入您的课堂详细信息。我倾向于走这条路,尤其是如果您希望在表视图上实现其他自定义行为
另一个选项是创建一个新类,并将其作为事件过滤器安装在QTableView上。然后,您的新类在事件进入QTableView之前获取事件,您可以对它们采取相应的行动。在Qt Assistant中查找installEventFilter,这将使您了解如何执行此操作的详细信息 非常感谢你!使用您的答案作为起点,我还发现在子类化方面,此资源很有价值:。我还将在编辑部分为原始问题添加一个更完整的答案。非常感谢!使用您的答案作为起点,我还发现在子类化方面,此资源很有价值:。我还将在编辑部分为原始问题添加一个更完整的答案。
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);
}
}
}
#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
#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);
}
}
}