簡體   English   中英

如何使用 QT Designer 和 Visual Studio 連接 Qt 信號和槽

[英]How to connect Qt signals and slots using QT Designer and Visual Studio

我正在使用 Qt Designer 設計我的應用程序,其中包含一個“加載文件” QPushButton (已提升為自定義loadfile.h )以及一個 QOpenGLWidget(已提升為自定義OGLWidget.h )。

我想要它,這樣當我單擊“加載文件”按鈕時,它會向我的OGLWidget class 中的一個插槽發送一個信號,它會彈出一個對話框並加載文件。

我首先在 Qt Designer 中進入信號/插槽編輯模式,並將按鈕連接到openglwidget ,並將clicked()作為信號和新添加的(從 Qt Designer 中) populate_mesh_from_obj()

然后我做了一個 function:

void OGLWidget::populate_mesh_from_obj()
{
    exit(0);
}

作為測試,在 header 中輸入:

public slots:
   void populate_mesh_from_obj();

現在在我的腦海里我想:

  1. 信號clicked()已經由 Qt 魔法實現
  2. 該插槽已由我實施
  3. Qt 設計師已將它們連接到某處

所以對我來說這應該有效。 任何想法為什么沒有?

你必須手動連接它們..

connect(ui->button, &QPushButton::clicked, yourGlPointer, &OGLWidget::populate_mesh_from_obj);

幸運的是,接受的答案是不正確的(並不是說它不能手動工作,而是你不必那樣做)。

事實上,QT 會自動將信號連接到所有遵循標准命名約定的插槽。

這個插槽的命名約定是這樣的:

void on_<object name>_<signal name>(<signal parameters>);

在您的情況下,這意味着如果您在 QT Designer 中創建QPushButton ,如下所示:

QPushButton 加載文件

object nameloadfile ,信號名稱為clicked

現在,在 header 中像這樣聲明您的 function:

public slots:
   void on_loadfile_clicked();

並在 cpp 中這樣定義它:

void OGLWidget::on_loadfile_clicked()
{
    exit(0);
}

連接將自動處理。

這種自動連接功能實際上是通過 QT 元對象編譯器實現的。 您可以通過打開由 QT Designer 生成的ui_<classname>.h文件來追溯發生的情況。 它將包含一個 function void setupUi(<QClassName> *<YourClassName>)包含一行QMetaObject::connectSlotsByName(<YourClassName>); . 這就是指示 QTs 元對象編譯器為您實現連接的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM