アプリケーションのメインウィンドウにQt Designerを使用していて、その中にさまざまなウィジェットが含まれている場合、これらのウィジェットをsepcificallyでさらにカスタマイズするにはどうすればいいですか?たとえば、メインアプリケーション内にQTableView
ウィジェットがあります。アプリケーションをデバッグすると、ui_myapplication.h
ファイルがQt Designer .ui
フォームから作成されます。そのファイルに定義されているウィジェットに余分なものを追加したいとします。実行時に作成された場合、どうすればよいでしょうか?特定のフォームウィジェットにshift-click修飾子を実装していますか?
例:myApplication.cpp
で
、私はこのコードブロックを持っている:
void myApplication::mousePressEvent(QMouseEvent* event) {
if(event->modifiers() & Qt::ShiftModifier) {
if(event->button() == Qt::LeftButton) {
qDebug() << "shift modifier";
ui->tableView->setSortingEnabled(false);
}
}
}
これは私が欲しいものに似ていますが、正確ではありません。私がShift
を保持し、列ヘッダーを左クリックするとテーブルのソート機能を無効にするtableView
という名前のQTableView
ウィジェット(これはQt Designerで作成したメインアプリケーションに含まれています)を持つことです。 (最終的な目標は、Shiftキーを押しながらクリックすると短時間の列並べ替えが無効になるので、列を並べ替えるのではなく列内のすべての項目を選択できるようにすることです)。
上記のコードは、メインアプリケーションの一番下(他のウィジェットがない場所)で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);
}
}
}
私はこれをどのように行うことができますか?
EDIT:私は、特定のウィジェットを対象とするイベントフィルタを使用してこれを行うことができると私は信じていました。正しい軌道にいるのですか?
EDIT 2:以下gougの答えにおかげで、私はQTableView
をサブクラス化し、新しいクラスに私の既存フォームのQTableView
を促進することにより、必要なものを達成することができました。以下を参照してください:
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);
}
}
}
ありがとうございました!あなたの答えを出発点として、私はこのリソースがサブクラス化に来たときに貴重なものであることも知った:http://www.qtcentre.org/threads/43710-Subclass-QLabel。私はまた、 "EDIT"セクションの元の質問に、より完全な答えを加えます。 – orbit