Qt在单击按钮时调用Child-Window

Qt call Child-Window on a button click

本文关键字:调用 Child-Window 按钮 单击 Qt      更新时间:2023-10-16

我是Qt的新手。我正在尝试从myMyMainWindow打开花药window.我无法抓住,我在这种情况下做错了什么。不想让你们解决我的问题,就说拜托,我做错了什么。

所以我有一个MainWindow.h(看看这个评论,认为你不需要了解它的整个过程(:

#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,我没有操作。如果可以的话,请帮助我。谢谢。

这是

代码中的拼写错误。您需要读取应用程序的输出以了解原因。

connect(timer_Button,SIGNAL(click((clicked(((,this,SLOT(Open_Timer_Window((((;

我建议你使用Qt5语法。

我不知道

你为什么在这种情况下使用 QLayout,我建议看看这篇文章:这里

但是要解决您的问题,请尝试将代码更改为以下内容:


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:将对话框更改为您的窗口。