【问题标题】:Qt QPushbutton not added by using .ui使用 .ui 未添加 Qt QPushbutton
【发布时间】: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,并创建了连接功能,但是找不到这个按钮..我应该如何解决这个问题?

【问题讨论】:

    标签: c++ qt user-interface button


    【解决方案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。非常感谢!
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    相关资源
    最近更新 更多