我刚刚开始学习QT,我想要完成的是点击按钮上的弹出消息。 以下是我的文件的样子:
的main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QDialog>
#include <QLabel>
#include <QMessageBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow *mainWindow = new MainWindow();
QLabel *text = new QLabel("Some text");
QPushButton *btn = new QPushButton("Click");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(btn);
layout->addWidget(text);
QObject::connect(btn, SIGNAL(clicked()), &app, SLOT(popup()));
mainWindow->setLayout(layout);
mainWindow->show();
return app.exec();
}
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;
}
void MainWindow::popUp()
{
QMessageBox::information(this, "New Box", "Message");
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void popUp();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
你能解释一下我做错了什么,或者我的代码中可能缺少什么。
答案 0 :(得分:2)
我建议图形部分在类GetHashCode
中实现它,因为私有的成员MainWindow
处理设计。
ui
不要对#include <QMessageBox>
#include <QLabel>
#include <QLayout>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QLabel *text = new QLabel("Some text");
QPushButton *btn = new QPushButton("Click");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(btn);
layout->addWidget(text);
ui->centralWidget->setLayout(layout);
connect(btn, &QPushButton::clicked, this, &MainWindow::popUp);
}
进行任何更改,代码应如下所示:
main.cpp
答案 1 :(得分:0)
连接错误。您应该将clicked()
信号连接到mainWindow
的广告位popUp()
,因为它是MainWindow
类的成员。并且不要忘记c ++的区分大小写(pop Up ,而不是弹出窗口):
QObject::connect(btn, SIGNAL(clicked()), mainWindow, SLOT(popUp()));
答案 2 :(得分:0)
您正在从主窗口外部连接到私人广告位。 应用程序输出可能会向您显示如下警告:
QObject :: connect:没有这样的插槽QApplication :: popup()
通常你要做的就是把主窗口内的东西放在mainwindow类中。
例如:在构造函数内创建布局 您可以在创建对象时使用parent参数,以便在使用mainwindow完成时将其销毁。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QLabel *text = new QLabel("Some text", this);
QPushButton *btn = new QPushButton("Click", this);
QHBoxLayout *layout = new QHBoxLayout;
QObject::connect(btn, SIGNAL(clicked()), this, SLOT(popUp()));
ui->centralWidget->setLayout(layout);
this->show();
}
您必须使用ui->centralWidget
,因为这是主窗口的工作原理。应用程序输出也应该给你一个警告。
像这样:
QWidget :: setLayout:试图设置QLayout&#34;&#34;在MainWindow&#34; MainWindow&#34;,已经有一个布局
答案 3 :(得分:0)
好的,你必须处理文件mainwindow.cpp
。你已经创建了插槽,所以连接它在MainWindow的构造函数中添加这个代码(如果你不知道女巫是mw构造函数,那么它是写成ui->setupUi(this);
的函数)
connect(ui->btn, SIGNAL(clicked()), SLOT(popUp()));
现在在插槽MainWindow::popUp();
中输入此代码:
QMessageBox msgBox;
msgBox.setText("text to write");
msgBox.exec();
记得在mainwindow.cpp 中加入QMessageBox
,你不应该在main.cpp上编写代码,必须是这样的:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}