簡體   English   中英

Qt5 C ++使用Qt Designer鏈接新窗口

[英]Qt5 C++ Link New Window with Qt Designer

在過去的3個小時中,我一直在努力解決這個問題。 老實說,我猶豫要問這個問題,但似乎我的具體問題不會在任何地方得到回答。 所以這是我的情況:

TL; DR:如何將新創建的窗口(在代碼中或在Qt Designer中)與相應的零件鏈接。 就是說,如何鏈接代碼生成的窗口和Qt Designer以及其他方法?


現在,我正在Visual Studio 2017中使用Qt5開發 Window應用程序

我希望在單擊按鈕時打開一個新窗口,然后像使用主窗口一樣使用Qt Designer編輯它。 (請記住,我主要使用Visual Studio 2017進行編程。)

我完全能夠做到這一點。 但是我對如何使用Qt Designer訪問“類”和整個窗口一無所知。 我以為我需要一個* .ui文件將其輸入到Qt Designer中,但是我不知道如何創建它。 另外,我通讀了整個文檔,但是卻一無所獲。

因此,我打開新窗口的代碼如下所示:

mainprog.h:

class Program: public QMainWindow
{
    Q_OBJECT

public:
    Program(QWidget *parent = Q_NULLPTR);

private:
    Ui::ProgramClass ui;
    Ui::ProgramClass * uip = &ui;

private slots:

    void on_pushbutton_settings_released();

};

mainprog.cpp:

Program::Program(QWidget *parent)
            : QMainWindow(parent)
{
ui.setupUi(this);

connect(uip->pushButton_settings, SIGNAL(released()), this, SLOT(on_pushbutton_settings_released()));

}

//-----------------------------------------------
// Related function

void Program::on_pushbutton_settings_released()
{
qDebug() << "on_pushbutton_settings_released";  

QWindow *settings_window = new QWindow();
settings_window->show();

}

因此,這就是我創建和顯示新窗口(此處為settings_window)的方式。 但是如何“訪問”它的類及其方法並在Qt Designer中對其進行編輯? 如果我要使用Qt Creator,就不會有(或至少會更少)問題,因為有很多教程,而且Qt Creator會自動創建所有需要的文件。 但是我在Visual Studio 2017中工作,因此無法使用Qt Designer / Creator / etc的所有實用程序。

我以為我可以創建特定的頭文件和* .cpp-文件。 但是話又說回來,我應該放在那里做什么呢? 我發現總是有一個“ ui_Program.h ”文件,並且這個文件是通過讀取* .ui文件創建的。 但是,即使我創建了這樣的東西,如何使它讀取所有內容?

或者,也許我會反過來問: 如何在我自己的Qt5 C ++代碼中使用Qt Designer中的所有相關類,標頭等使用/鏈接新創建的窗口?


看來,最簡單的解決方案是使用Qt VS Tool擴展 該工具應處理基於.ui的窗口小部件的創建和自定義構建步驟(我自己尚未使用過,希望可以直接使用:)。

還有其他選擇,例如使用支持Qt的第三方構建系統(例如CMake或Meson)或手動設置預構建步驟,但這是更廣泛的主題。


我認為您會喜歡上面的方法,但是我也會嘗試直接回答您的問題。

我以為我需要一個* .ui文件將其輸入到Qt Designer中,但是我不知道如何創建它。

只需打開Qt Designer並使用“新建表單”對話框(或者單擊“文件>新建”將其打開),然后保存文件即可。

.ui文件是XML文件。 為了生成代碼,您需要使用Qt的uic工具(代表UI編譯器)來生成ui_<something>.h文件。 通常,這是自動完成的-我在第一部分中提到的工具每次修改.ui文件時都會做到這一點。

擁有生成的頭文件后,就可以像使用Program類一樣使用它:從QWidget派生( QMainWindow也從它派生),然后在構造函數中調用setupUi

還有一件事: QWindow 不是您想要的。 對於GUI應用程序,您需要改用QWidget QWindow由(頂級) QWidgets內部使用,有時有時直接使用(例如,當需要使用第三方呈現而不是Qt的API時)。 您可以在此處了解更多信息。

因此,對於嘗試解決我在問題中描述的相同問題的任何人,我都找到了答案。

  1. 您需要安裝Qt Creator,但是如果您具有Qt Designer並使用它,通常應該安裝該軟件。

  2. 在Qt Creator中創建一個新項目,隨便命名。

  3. 就像您要在Qt Creator中進行編碼一樣,這意味着轉到項目文件名,單擊鼠標右鍵,然后單擊“添加新...”。 (Projectname.pro->右鍵單擊->添加新...-> Qt-> Qt Designer-Formular-Class(或任何用英語稱呼的))

  4. 以您希望它在VS- Project中擁有的方式命名。

  5. 保存所有內容,關閉Qt Creator。

  6. 導航到保存* .pro文件(Qt Creator項目文件)的文件夾,然后選擇與類相關的文件。

    • classname.h
    • classname.cpp
    • classname.ui
  7. 將這些文件復制到您的vs項目文件夾中

  8. 將它們拖放或集成到您的vs-project中,就像通常使用“普通”附加文件那樣。

  9. 更正所有#include和所有需要的內容。

  10. 不知道這是否必要,但可以使用Qt Designer在項目瀏覽器中的vs.中打開* .ui文件。

現在,您可以使用以下代碼在您的項目中實現新窗口(QWidget):

classname new_widget; // creating new widget
new_widget.setModal(true); // isn't necessary, more info in the video (link) I post below
set_wind.exec(); // execute new widget (or whatever)

這可能不是最專業的方法,但這就是我認為它對我有用的方式。 考慮到這是一個繁瑣的過程,有多個窗口。

暫無
暫無

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

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