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

+0

试过这样做和所有相同它不起作用。我可能会在'MyMainWindow'中错误地创建'T_timer * myTimer'吗? –

+0

请更新您的代码,因为它不是可编译的。顺便说一句,尝试使用'myTimer-> exec()'而不是'show()'。别忘了释放内存。无论如何,你有很多脏代码,试图回顾Qt的例子。 –

+0

已更改。但没有成功。我可以给一个链接吗? https://www.dropbox.com/sh/g4b6kd72fcncm5h/AACRDfO7S3QZbMFpyT_833Cpa?dl=0 –

我不知道你为什么在这种情况下使用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:将对话框更改为您的窗口。