2

vtk アプリケーション用の GUI を作成するために qt クリエーターを使用しています。

#define アクションを作成し、そのコマンドを QPushButton に割り当てたいと考えています。

ボタンが押された場合に定義を再現するにはどうすればよいですか?

例。ui->プッシュボタン->...

4

2 に答える 2

5

簡単な方法は、ボタンのデフォルトの応答スロットを定義することです。クラス定義 (pushButton を定義する同じクラス) では、slotsセクションの下にデフォルト スロットを作成するだけです。

class MyMainApplication : public QMainWindow
{
  Q_OBJECT

  public:
    MyMainApplication(QWidget *parent = 0);
    ~MyMainApplication();

   // More stuff in the public section (...)

  public slots:
    void on_pushButton_clicked();    // This is the important line

  // The remaining definitions in your class
};

クラス実装で関数をプログラムするだけon_pushButton_clicked()で、 というボタンのクリックに応答しますpushButton

デフォルト スロットの構文はon_NAMEOFTHEWIDGET_NAMEOFTHESIGNAL.

デフォルトのスロットでは、接続は自動的に行われます。スロットに汎用名を使用する場合は、手動で接続する必要があります。たとえば、代わりに on_pushButton_clicked()を使用したいとしますmySlot()。クラス定義では、次のように入力します

(...)
public slots:
  void mySlot();
(...)

クラスの実装では、おそらくコンストラクターで、ui->setupUi(this);コマンドの後にボタンとスロットを接続します。

connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(mySlot()));

最後の発言: この特定のケースでは、スロットもprivate.

于 2012-08-21T11:32:09.007 に答える
2

Signals and Slotsと呼ばれる Qt の機能を使用する必要があります。多くのオブジェクトは、相互作用したときに信号を送信できます。例は、QPushButton から発行される "clicked()" シグナル、または QAction をクリックすると発行される "triggered()" です。

主なアイデアは、信号をスロットに接続することです。スロットは、シグナルが発行されたときに呼び出される関数です。PyQt の例を提供できます。

QtCore.QObject.connect(self.ui.myButton, QtCore.SIGNAL("clicked()"), self.someFunction)

C++ コードはそれほど変わらないはずです。Qt の例を確認してください。多くの優れた機能が提供されています。

于 2012-08-21T09:36:39.780 に答える