2

我正在使用 qt creator 为 vtk 应用程序创建 gui。

我做了一个#define 操作,我想将该命令分配给QPushButton。

如果按下,如何使按钮重现我的定义?

例子。ui->pushButton->...

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

您需要使用 Qt 的Signals and Slots功能。许多对象在与之交互时可以发送信号。示例是从 QPushButton 发出的“clicked()”信号,或在单击 QAction 时发出的“triggered()”。

主要思想是将信号连接到插槽。插槽是在发出信号时调用的函数。我可以为您提供一个 PyQt 示例:

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

C++ 代码应该没有太大的不同。检查 Qt 示例,它们提供了很多好东西。

于 2012-08-21T09:36:39.780 回答