使用 .ui 未添加 Qt QPushbutton

Posted

技术标签:

【中文标题】使用 .ui 未添加 Qt QPushbutton【英文标题】:Qt QPushbutton not added by using .ui 【发布时间】:2022-01-11 08:52:21 【问题描述】:

我正在尝试在我的 mainwindow.ui 中添加一个新的 QPushbutton。 我通过拖入.ui添加了Qpushbutton,在右侧我可以看到它添加正确。

(我添加了btnDownload按钮,btnQuit是很久以前添加的,效果很好)

我点击 btnDownload 上的 go to slot 并创建了以下代码:


void MainWindow::on_btnDownload_clicked()

    QMessageBox::information(this,"notify","button is clicked "); //this part is what I added

但是,当我构建我的项目时,我没有看到在我找到它的地方添加了这个按钮。 为了解决这个问题,我尝试在 mainwindow.cpp 文件中使用 setGeometry 函数来定位此按钮。

这是我尝试编写的代码:

ui->btnDownload->setGeometry(x,y,wide,height);

但我收到warning message 说:

no memeber named 'btnDownload' in Mainwindow::ui

我确实在.ui中添加了QPushbutton,并创建了连接功能,但是找不到这个按钮..我应该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我想我修好了。 我将它与 btnQuit 按钮进行了比较(效果很好) 不同的是,新按钮没有在头文件中阐明。我要修复它,我认为它会起作用。如果没有,我会添加它。

【讨论】:

头文件只有在编译时才会更新,如果项目配置正确,则需要先运行uic实用程序。【参考方案2】:

查看 .ui 文件。它是 XML。您应该会看到类似这样的内容

  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>130</x>
      <y>150</y>
      <width>75</width>
      <height>23</height>
     </rect>
    </property>
    <property name="text">
     <string>PushButton</string>
    </property>
   </widget>
  </widget>

在通常位于&lt;workspace&gt;\build-&lt;project&gt;-Desktop_Qt_6_2_0_MSVC2019_64bit-Debug\&lt;project&gt;_autogen\include 的构建目录中,您应该会找到包含内容的文件ui_mainwindow.h

#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow

public:
    QWidget *centralwidget;
    QPushButton *pushButton; //<<======= this
    QMenuBar *menubar;
    QStatusBar *statusbar;

    void setupUi(QMainWindow *MainWindow)
    

您应该在下方找到按钮的实例化

    void setupUi(QMainWindow *MainWindow)
    
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(800, 600);
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        pushButton = new QPushButton(centralwidget);  // <<<============= this
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(130, 150, 75, 23));
        MainWindow->setCentralWidget(centralwidget);

【讨论】:

这是解决问题的确切方法。起初我没有看到 ui_mainwindow.h 文件,所以我不知道该文件存在。我找到了那个文件并添加了一些代码,我可以使用这个 QPushbutton。非常感谢!

以上是关于使用 .ui 未添加 Qt QPushbutton的主要内容,如果未能解决你的问题,请参考以下文章

qt中怎样把一个控件即加入Qicon变量,又加入文字?如下图

QT做一个按钮Qpushbutton 倒计时功能的小小程序

在 C++ 中的 Qt 中向 UI 动态添加未知数量的按钮

未连接的 Qt 插槽被调用

qtwidget鼠标放上去浮现button

QT软件开发:设置QPushButton样式