Qt通过点击按钮调用Child-Window
问题描述:
我是Qt中的新成员。我试图从myMyMainWindow
开放另一个window
。我无法赶上,我在做什么错了这种情况。不要你们解决我的问题,只是说请取悦我,我做错了什么。Qt通过点击按钮调用Child-Window
所以我有一个MainWindow.h
(看看这个评论,觉得你并不需要了解它的整个proccess):
#ifndef MYMAINWINDOW_H
#define MYMAINWINDOW_H
#include <QDialog>
#include <QMainWindow>
#include <QPushButton>
#include <QLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "timer.h"
class MyMainWindow: public QMainWindow
{
Q_OBJECT
private:
QPushButton *timer_Button;
QPushButton *StopWatch;
QPushButton *Close;
T_timer *myTimer;
public:
MyMainWindow(QWidget *parent);
public slots:
void Open_Timer_Window(); // Slot for opening a new window
};
#endif // MYMAINWINDOW_H
我MyMainWindow.cpp
文件:
#include "MyMainWindow.h"
MyMainWindow::MyMainWindow(QWidget *parent=0): QDialog(parent)
{
// just creating Buttons
timer_Button = new QPushButton ("Timer");
Close=new QPushButton("Close");
QHBoxLayout *Up=new QHBoxLayout;
Up->addWidget(timer_Button);
QHBoxLayout *Down=new QHBoxLayout;
Down->addWidget(Close);
QVBoxLayout *Main=new QVBoxLayout;
Main->addLayout(Up);
Main->addLayout(Down);
// the main part
connect(Close,SIGNAL(clicked()),this,SLOT(close()));
connect(timer_Button,SIGNAL(clicked()),this,SLOT(Open_Timer_Window()));// call `Slot of Open_Timer_Window()`
setLayout(Main);
setWindowTitle("Smart Watch");
}
void MyMainWindow::Open_Timer_Window()
{
myTimer = new T_timer(0);
myTimer->show();
}
所以,我想我应该给你看第二个窗口,可能是有一个错误:
The header:
#include <QPushButton>
#include <QDialog>
#include <QHBoxLayout>
#include <QVBoxLayout>
class T_timer : public QDialog
{
Q_OBJECT
private:
QPushButton Start;
QPushButton Stop;
public:
T_timer(QWidget *parent=0);
};
而且.cpp
:
#include "timer.h"
T_timer::T_timer(QWidget *parent=0): QDialog(parent)
{
Start=new QPushButton ("Start");
Stop=new QPushButton ("Stop");
QHBoxLayout *Up=new QHBoxLayout;
Up->addWidget(Start);
Up->addWidget(Stop);
setLayout(Up);
}
完全,我有在屏幕上我的主窗口,点击按钮后timer
,我还没收到action.Help我请,如果你能。谢谢。
答
这是您的代码中的拼写错误。您需要阅读应用程序的输出以了解原因。 (Timer_Button,SIGNAL( click() clicked()),this,SLOT(Open_Timer_Window()));我建议你使用Qt5 syntax。
答
我不知道你为什么在这种情况下使用QLayout,我建议考虑看看这篇文章:here
但要解决问题你试试你的代码改成这样:
connect(Close, SIGNAL(clicked(bool)), this, SLOT(close()));
connect(timer_Button, SIGNAL(clicked(bool)),this,SLOT(Open_Timer_Window()));
void MainWindow::Open_Timer_Window() {
Dialog dlg;
dlg.setModal(true);
dlg.show();
dlg.exec();
}
OBS:将对话框更改为您的窗口。
试过这样做和所有相同它不起作用。我可能会在'MyMainWindow'中错误地创建'T_timer * myTimer'吗? –
请更新您的代码,因为它不是可编译的。顺便说一句,尝试使用'myTimer-> exec()'而不是'show()'。别忘了释放内存。无论如何,你有很多脏代码,试图回顾Qt的例子。 –
已更改。但没有成功。我可以给一个链接吗? https://www.dropbox.com/sh/g4b6kd72fcncm5h/AACRDfO7S3QZbMFpyT_833Cpa?dl=0 –