Qt 我怎样才能称之为;“按钮”;在main.cpp中?
mainwindow.h:Qt 我怎样才能称之为;“按钮”;在main.cpp中?,qt,Qt,mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow();
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
QObject::connect(pushButton, SIGNAL(clicked()),
&a, SLOT(quit()));
return a.exec();
}
你能给我一个解决方案吗?我如何在main.cpp中调用它?
谢谢
补充1:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QObject::connect(ui->pushButton, SIGNAL(clicked()),
QCoreApplication::instance(), SLOT(close()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
close();
}
如果我这样做,那么程序可以运行,但不能关闭整个应用程序。我猜这是因为QCoreApplication::instance()返回null,因为在构造函数阶段,QApplication不存在,对吗
补充2:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QObject::connect(ui->pushButton, SIGNAL(clicked()),
QCoreApplication::instance(), SLOT(close()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
close();
}
一种解决方案是在mainwindow.cpp中添加按钮的新插槽,如上所述。
但我还是希望知道如何用我的方式去做(这篇文章的主要部分)
补充3:
Alberto的代码通过如下方式使用QWidget运行良好
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));
第一种方法无法工作,因为正如编译器所说,您没有在main.cpp范围中定义QPushButton。所以编译器找不到它 正确的方法是你最后的方法。你开发了一个.UI文件,其中添加了一个QPutStudio,然后在C++代码中处理你的.UI文件(在你的例子中是一个QualWindows子类),你将它与一个插槽连接起来。但是你的转接电话错了。这是我的代码:
//widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
//widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include <QtGui>
Widget::~Widget()
{
delete ui;
}
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));
}
//widget.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>93</width>
<height>41</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
//main.cpp:
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
//widget.h:
#ifndef小部件
#定义小部件
#包括
名称空间用户界面{
类控件;
}
类Widget:publicqwidget
{
Q_对象
公众:
显式小部件(QWidget*parent=0);
~Widget();
私人:
Ui::Widget*Ui;
};
#endif//WIDGET\u H
//widget.cpp:
#包括“widget.h”
#包括“ui_widget.h”
#包括
小部件::~Widget()
{
删除用户界面;
}
Widget::Widget(QWidget*父项):
QWidget(母公司),
ui(新ui::小部件)
{
用户界面->设置用户界面(此);
连接(ui->按钮,信号(点击()),此,插槽(关闭());
}
//widget.ui:
小装置
0
0
93
41
小装置
按钮
//main.cpp:
#包括
#包括“widget.h”
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
小部件w;
w、 show();
返回a.exec();
}
使用:连接(ui->按钮、信号(单击())、此、插槽(关闭());
我们可以这样简化:连接(1,2,3,4)
当由于用户在1上执行某些操作而发出2时,请在3上执行4
翻译:当用户单击按钮(定义到ui文件中)时,请关闭此按钮(QMainWindow子类)。如果您查看main.cpp代码,MainWindow是您向用户显示的主要小部件。所以你要关闭整个应用程序 第一种方法无法工作,因为正如编译器所说,您没有在main.cpp范围内定义QPushButton。所以编译器找不到它 正确的方法是你最后的方法。你开发了一个.UI文件,其中添加了一个QPutStudio,然后在C++代码中处理你的.UI文件(在你的例子中是一个QualWindows子类),你将它与一个插槽连接起来。但是你的转接电话错了。这是我的代码:
//widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
//widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include <QtGui>
Widget::~Widget()
{
delete ui;
}
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));
}
//widget.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>93</width>
<height>41</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
//main.cpp:
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
//widget.h:
#ifndef小部件
#定义小部件
#包括
名称空间用户界面{
类控件;
}
类Widget:publicqwidget
{
Q_对象
公众:
显式小部件(QWidget*parent=0);
~Widget();
私人:
Ui::Widget*Ui;
};
#endif//WIDGET\u H
//widget.cpp:
#包括“widget.h”
#包括“ui_widget.h”
#包括
小部件::~Widget()
{
删除用户界面;
}
Widget::Widget(QWidget*父项):
QWidget(母公司),
ui(新ui::小部件)
{
用户界面->设置用户界面(此);
连接(ui->按钮,信号(点击()),此,插槽(关闭());
}
//widget.ui:
小装置
0
0
93
41
小装置
按钮
//main.cpp:
#包括
#包括“widget.h”
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
小部件w;
w、 show();
返回a.exec();
}
使用:连接(ui->按钮、信号(单击())、此、插槽(关闭());
我们可以这样简化:连接(1,2,3,4)
当由于用户在1上执行某些操作而发出2时,请在3上执行4
翻译:当用户单击按钮(定义到ui文件中)时,请关闭此按钮(QMainWindow子类)。如果您查看main.cpp代码,MainWindow是您向用户显示的主要小部件。所以你要关闭整个应用程序 你为什么这么急着要在main.cpp中调用它?那怎么办?我需要退出整个应用程序,但指向整个应用程序的“a”位于main.cpp中,因此我将代码放在其中。您可以通过调用静态QCoreApplication::instance()函数,从代码中的任意位置检索指向当前Q(核心)应用程序的指针。谢谢您的回答!请查看我上面的主要帖子,补充1部分。为什么要连接到“关闭”插槽?QCoreApp没有这个功能。你要找的是“退出”的位置。()为什么你这么急着要在main.cpp中调用它?那怎么办?我需要退出整个应用程序,但指向整个应用程序的“a”位于main.cpp中,因此我将代码放在其中。您可以通过调用静态QCoreApplication::instance()函数,从代码中的任意位置检索指向当前Q(核心)应用程序的指针。谢谢您的回答!请查看我上面的主要帖子,补充1部分。为什么要连接到“关闭”插槽?QCoreApp没有这个功能。你要找的是“退出”的位置。我测试了你的代码,效果很好。但是我的和你的非常相似,但它的工作方式不同!我注意到区别在于您使用QWidget,我使用QMainWindow.QMainWindow和QWidget的工作方式相同。所以没关系。也许你添加/删除了其他内容。您可以尝试使用我的代码并添加QMainWindow而不是QWidget。如果你不能解决,请告诉我们。对不起。我要求更新它。后来我又做了一次试验,那次对QWidget和QMainWindow都很好。非常感谢。别担心。它必须工作,因为QMainWindow继承了QWidget。我忘了提了。我测试了你的代码,效果很好。但是我的和你的非常相似,但它的工作方式不同!我注意到区别在于您使用QWidg