【问题标题】:Qt button assign commandQt 按钮分配命令
【发布时间】:2012-08-21 09:18:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: qt qpushbutton


    【解决方案1】:

    简单的方法是为您的按钮定义一个默认的响应槽。在您的类定义(定义 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

    【讨论】:

    • 我明白你在说什么,但我有我希望按钮在单击 mainwindow.cpp 时执行的操作,例如 #define AlignXAxis(),我试图让它像 connect( ui->pushButton,SIGNAL(clicked()),this,SLOT(AlignXAxis()));但它不起作用。
    • #define AlignXAxis() 是什么意思。你要做的就是在你的类定义的slots: 区域放一个void AlignXAxis() 函数,实现函数然后建立连接。据我所知,您的 #define 声明不会连接到任何东西。您必须将SIGNAL(在小部件的signals: 块中声明)连接到SLOT(在接收小部件的slots: 块中声明)。我不明白你为什么要使用#define(据我所知,这又不是一个插槽)。
    • 是的,你是对的。但是当我尝试调用另一个函数时,例如 void AlignCamera(),它说未定义的引用 `AlignCamera()'
    • AlignCamera() 是否定义为 slot 类?否则,如果没有看到一些代码,就不可能提出其他建议。
    • @user1613749 您只能连接到槽,它们是标记为槽的 QObject/QObject 子类的方法。 #define 不起作用。 (无论如何在 C++ 中被认为是不好的风格)。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-30
      • 1970-01-01
      • 2022-01-06
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多