【发布时间】:2012-08-21 09:18:09
【问题描述】:
我正在使用 qt creator 为 vtk 应用程序创建 gui。
我做了一个#define 操作,我想将该命令分配给 QPushButton。
如果按下按钮,如何使按钮重现我的定义?
例子。 ui->pushButton->...
【问题讨论】:
标签: qt qpushbutton
我正在使用 qt creator 为 vtk 应用程序创建 gui。
我做了一个#define 操作,我想将该命令分配给 QPushButton。
如果按下按钮,如何使按钮重现我的定义?
例子。 ui->pushButton->...
【问题讨论】:
标签: qt qpushbutton
简单的方法是为您的按钮定义一个默认的响应槽。在您的类定义(定义 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。
【讨论】:
#define AlignXAxis() 是什么意思。你要做的就是在你的类定义的slots: 区域放一个void AlignXAxis() 函数,实现函数然后建立连接。据我所知,您的 #define 声明不会连接到任何东西。您必须将SIGNAL(在小部件的signals: 块中声明)连接到SLOT(在接收小部件的slots: 块中声明)。我不明白你为什么要使用#define(据我所知,这又不是一个插槽)。
AlignCamera() 是否定义为 slot 类?否则,如果没有看到一些代码,就不可能提出其他建议。
您需要使用 Qt 的 Signals and Slots 功能。许多对象在与之交互时可以发送信号。示例是从 QPushButton 发出的“clicked()”信号,或在单击 QAction 时发出的“triggered()”。
主要思想是将信号连接到插槽。插槽是在发出信号时调用的函数。我可以为您提供一个 PyQt 示例:
QtCore.QObject.connect(self.ui.myButton, QtCore.SIGNAL("clicked()"), self.someFunction)
C++ 代码应该没有太大的不同。查看 Qt 示例,它们提供了很多好东西。
【讨论】: